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

JS: Comparing Arrays and adding new items or removing items no longer in array

本文关键字:项目 数组 删除 不再 比较 添加 JS      更新时间:2023-09-26

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

 ArrayOne =  [Apple, Banana, Orange, Banana] 
//yes, an item can be there twice or more

然后复制到ArrayOne_Copy = ArrayOne

好的,然后间隔5分钟后,我再次检查DB并生成并替换数组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`

。我有点迷路了,也许解决办法很简单。你能建议最佳实践吗?

你不是在复制它,你是在引用它

你需要做一个数组的硬拷贝,这可以用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

您可以使用这种函数:

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将是用。

修改的数组。