Array.filter () и ссылка на отфильтрованные объекты - PullRequest
0 голосов
/ 15 ноября 2018

Если мы применяем функцию array.filter к массиву объектов, содержит ли результирующий массив ссылку на объекты, отфильтрованные из первого массива?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

содержит ли результирующий массив ссылку на объекты, отфильтрованные из первого массива

Да, это одни и те же объекты, filter не клонирует их. Это как если бы это не клонировало объект:

const a = {id: 1, value: "one"};
const b = a;
a.value = a.value.toUpperCase();
console.log(b.value); // "ONE" <== In caps

Пример в реальном времени с filter:

const a = [
  {id: 1, value: "one"},
  {id: 2, value: "two"},
  {id: 3, value: "three"}
];
const b = a.filter(entry => entry.id % 2);
a[0].value = a[0].value.toUpperCase();
console.log(a);
console.log(b);
.as-console-wrapper {
  max-height: 100% !important;
}

Обратите внимание, что "ONE" находится во всех заглавных буквах объекта, независимо от того, из какого массива вы получаете ссылку на объект.

0 голосов
/ 15 ноября 2018

просто пример, который он делает, проверьте ссылки ответа @TJ Crowder

    const arr = [{a:1}, {a:2}, {a:2}];

    const newArr = arr.filter(v => v.a < 3);

    newArr[0].a = 5;

    console.log(arr);
    console.log(newArr);
...