使用.filter()方法后如何保留原始数据?

时间:2018-09-24 02:41:30

标签: javascript arrays nested

这是我的数据: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 :(得分:0)

通过深层副本使用其他变量,

library(stringr)
str_replace_all(str, "[^[:alnum:]]", " ")  

答案 1 :(得分:0)

 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)

答案 2 :(得分:0)

之所以会出现问题,是因为您的数据是一个对象,并且您正在通过引用将其赋给变量,因此您需要先克隆数据,然后再像这样进行过滤

 var filteredData = {...data};
 var children = filteredData.children;
 filteredData= {...filteredData, children: children.filter(children => children.name != d.name);