2014-05-15 44 views
2

如何从阵列的副本中删除对象而不从原始阵列中删除对象?从阵列的副本中删除项目而不将其从阵列中删除

我有一个全局变量:

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

回答

12

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

var tempUserTrickList = userTrickList.slice(0); 

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

+0

我确实检查过了,这不起作用您必须使用slice而不是splice.bcoz splice会影响源数组。 http://fiddle.jshell.net/QRK4Q/ – Balachandran

+0

谢谢丹尼尔2号!和Manishankar! (编号1 ...) 像魅力一样工作:')这个社区生病了! –

+0

@Manishankar你绝对正确。我链接到正确使用'slice'的示例,并且在复制时错误地添加了'p'。谢谢你的收获。 – Daniel

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; } 

这里的数据是原始数组和目标是要从阵列 这个函数会返回数组删除元素不包含已删除的项目。

0
for (i = 0, l = arr.length; i < l; i++) { 
    if (arr[i] === item) { 
    arr.splice(i, 1); 
    i -= 1; 
    l -= 1; 
    } 
} 
+0

尽管此代码可能会回答这个问题,但提供关于此代码为何和/或如何回答此问题的其他上下文可提高其长期价值。 – Christian

0

丹尼尔的克隆阵列的方法是绝对正确的,但因为我没有看到一个面向ES6回答,我会提供了一个可选的解决方案:

,我们可以很容易地使用传播运算符来克隆一个数组,所以我们不必使用slice调用。

const arr = [1, 2, 3]; 
const copy = [...arr]; 
copy.pop(); 
console.log(arr); // returns [1, 2, 3] 
console.log(copy); // returns [1, 2]