Как сохранить исходные данные после использования метода .filter ()? - PullRequest
0 голосов
/ 24 сентября 2018

Это мои данные: https://api.myjson.com/bins/r82tg

Я использую метод .filter () для фильтрации по его имени,

 var filteredData = data;
 var children = filteredData.children;
 filteredData.children = children.filter(children => children.name != d.name);

Но когда я console.log мои исходные данные,Это также все еще фильтруется.Это почему?Как сохранить исходный массив данных перед фильтрацией?

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

 data = {
   id: 30,
   children: [
    { name: "stack"}, 
    {name:"overflow"}
   ]
 }
 
 
 var filteredData = JSON.parse(JSON.stringify(data));
 var children = filteredData.children;
 filteredData.children = children.filter(children => children.name != "stack");
 
 console.log(filteredData)
 console.log(data)
0 голосов
/ 24 сентября 2018

Проблема возникает из-за того, что ваши данные являются объектом, и вы передаете их переменной по ссылке, вам необходимо клонировать данные перед их фильтрацией, например

 var filteredData = {...data};
 var children = filteredData.children;
 filteredData= {...filteredData, children: children.filter(children => children.name != d.name);
0 голосов
/ 24 сентября 2018

Использование другой переменной с использованием глубокой копии,

let cloned = filteredData.children.map(x => Object.assign({}, x));
filteredData.children = cloned.filter(children => children.name != d.name);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...