如何从数组副本中删除对象而不将其从原始数据中删除?
我有一个全局变量:
var userTrickList = [];
在函数内部,我复制了该全局数组:
var tempUserTrickList = userTrickList;
然后我使用我创建的removeItem
函数删除某个对象。
removeItem(considerTrick.IDName, tempUserTrickList);
function removeItem(item, list) {
//takes a string as 'item', finds in the array as 'list',
//then removes it from the list.
for(var i = 0; i < list.length; i++)
{
if(item === list[i])
{
list.splice(i,1);
}
}
}
我的问题是,此功能也会将其从userTrickList
中删除。
有什么想法吗?这绝对是"removeItem(considerTrick.IDName, tempUserTrickList);"
中的问题,但我想不出解决方案。
答案 0 :(得分:13)
使用.slice(0)
克隆数组。
var tempUserTrickList = userTrickList.slice(0);
答案 1 :(得分:2)
根据您的要求使用此功能
function removeElementFromArray(data,target) {
var temp=new Array();
for ( var i = 0; i < data.length; i++) {
if(data[i]!=target){
temp.push(data[i]);
}
}
return temp; }
此处数据是原始数组,目标是要从数组中删除的元素 此函数将返回数组而不包含已删除的项目。
答案 2 :(得分:1)
答案 3 :(得分:0)
for (i = 0, l = arr.length; i < l; i++) {
if (arr[i] === item) {
arr.splice(i, 1);
i -= 1;
l -= 1;
}
}
答案 4 :(得分:0)
Daniel克隆数组的方法绝对正确,但由于我没有看到面向ES6的答案,我将提供另一种解决方案:
我们可以很容易地使用spread运算符来克隆数组,因此我们不必使用切片调用。
const arr = [1, 2, 3];
const copy = [...arr];
copy.pop();
console.log(arr); // returns [1, 2, 3]
console.log(copy); // returns [1, 2]