我有一个对象数组(firstList),现在我通过克隆数组firstList创建一个新数组(exportData),这个新数组我想要删除它的一些属性,我会做以下事情:
let exportData = this.firstList;
exportData = exportData.filter(function (props) {
delete props.job;
return true;
});
在这里,我不明白为什么即使我的旧数组也删除了这些属性,由于机制或我做错了什么?
答案 0 :(得分:2)
您没有创建数组的副本,而是创建对同一数组的新引用。您需要创建一个新数组并使用对象的副本填充if,如boran的答案。
答案 1 :(得分:1)
var x = Number(prompt("Ingrese un número"));
var contador = 1;
while (contador <= x) {
console.log(contador + x);
contador++;
}
答案 2 :(得分:1)
filter
在这里被滥用,因为它实际上没有过滤任何东西,只是迭代数组元素。对于数组迭代,应使用通用循环(for
,for..of
,forEach
)。
这里的问题是没有克隆props
个对象。修改后,更改会出现在每个使用过的地方。
应该将数组映射到省略job
属性的对象的浅副本。这可以通过传播和休息语法来完成:
exportData = exportData.map(({ job, ...props}) => ({...props}));
答案 3 :(得分:0)
exportData是firstList的引用。所以当在exportData中更改某些内容时,它们将反映在firstList中。所以,你需要克隆数组。
你可以这样做:
let exportData = [];
for(var i =0; i < this.firstList.length; i++){
exportData[i] = this.firstList[i];
}
exportData = exportData.filter(function (props) {
delete props.job;
return true;
});
这只是一个提示。
答案 4 :(得分:0)
您的代码按照应有的方式运行。
let exportData = this.firstList;
你没有创建一个新数组,你只是创建了一个对同一个数组的引用,使用哪个引用执行操作并不重要,因为它们都指的是同一个数组。
如果您尝试以这种方式克隆,它将是两个不同的数组,另一个副本,如果对exportData有任何更改,firstList将不会受到影响。
let exportData = JSON.parse(JSON.stringify(this.firstList));