Как получить отфильтрованный массив с помощью defineProperty JS?

#javascript #arrays #object #filter #defineproperty

#javascript #массивы #объект #Фильтр #defineproperty

Вопрос:

Я пытался найти способ сделать это, но ничего не нашел.

Я хочу отфильтровывать элементы массива при доступе к массиву. Например: отфильтровывать только отрицательные значения

 let arr = [-1, -2, -4, -5, 8, 9, 10, -7, 5, 7, 8, 4, -12];
let o = {
  arr: arr
};

Object.defineProperty(o, 'arr', {
  get: () => { /* filter only negative values */ }
});

// should print only positive values
console.log(o.arr) 

Ответ №1:

Вы можете использовать filter

 let arr = [-1, -2, -4, -5, 8, 9, 10, -7, 5, 7, 8, 4, -12];
let o = {
  array: arr
};

Object.defineProperty(o, 'arr', {
  get: () => {
    return o.array.filter(a => a >= 0)
  }
});

console.log(o.arr) 

Комментарии:

1. А что, если у меня нет указателя на массив?

2. Я не уверен, как у вас не могло быть указателя на него. Пожалуйста, объясните подробнее

Ответ №2:

вы можете использовать Array.prototype.filter и это (контекст)

 let arr = [-1, -2, -4, -5, 8, 9, 10, -7, 5, 7, 8, 4, -12];
let o = {
  arr,
};

Object.defineProperty(o, 'negative', {
  // return array values where item < 0
  get: function () {return this.arr.filter(item => item < 0)}
});

// should print only positive values
console.log(o.negative)