从数组副本中删除项目而不从原始数组中删除它

时间:2014-05-15 05:48:21

标签: javascript jquery arrays copy instance

如何从数组副本中删除对象而不将其从原始数据中删除?

我有一个全局变量:

    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);"中的问题,但我想不出解决方案。

5 个答案:

答案 0 :(得分:13)

使用.slice(0)克隆数组。

var tempUserTrickList = userTrickList.slice(0);

现金: http://davidwalsh.name/javascript-clone-array

答案 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)

尝试,它复制原始数组

var tempUserTrickList = JSON.parse(JSON.stringify(userTrickList));

Demo CopyArray

答案 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]