JS:比较数组并添加新项目或删除不再在数组中的项目

时间:2015-08-31 13:53:23

标签: javascript arrays

当我查询我的数据库中的项目时,我会生成一个数组,如

之类的列表
 ArrayOne =  [Apple, Banana, Orange, Banana] 
//yes, an item can be there twice or more

然后我在ArrayOne_Copy = ArrayOne

中复制它

确定, 然后在5分钟的间隔之后我再次检查数据库并生成并替换数组ArrayOne说现在就像

 ArrayOne =  [Apple, Peach, Banana, Pineapple, Banana, Melon] 

此时我想将ArrayOne_Copy与新生成的ArrayOne进行比较并从新列表重建列表但不清除列表并生成新输出,但我只想添加新项目或删除列表中不再包含的项目

如果我可以"说"代码我会告诉脚本:

Don't touch `Apple` because has not changed
Push 'Peach" between `Apple` and `Banana`
Push `Pineapple` between `Banana` and `Banana`
Remove `Orange`
Add `Melon`

如此。我有点失落,也许解决方案非常简单。 你能建议最好的做法吗?

2 个答案:

答案 0 :(得分:1)

你没有复制它,你引用它。

您需要制作阵列的硬拷贝,可以使用slice()

完成
var ArrayOne_Copy = ArrayOne.slice(0);

例如:

var ArrayOne = ['Apple', 'Banana', 'Orange', 'Banana'];

var ArrayOne_Copy = ArrayOne.slice(0);

ArrayOne.push('Melon');

console.log(ArrayOne);
console.log(ArrayOne_Copy);

http://jsfiddle.net/y7czyn3h/

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

答案 1 :(得分:-1)

您可以使用此类功能:

Array.prototype.complete = function( arr ){
  var result = new Array();
  for( var a in arr )
    result[ a ] = this[ a ] ? this[ a ] : arr[ a ];
  return result;
}

像这样:

ArrayFull = ArrayOne_Copy.complete( ArrayOne );

然后ArrayFull将是用。修改的数组。