簡體   English   中英

JS:比較數組並添加新項或刪除數組中不再存在的項

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

當我查詢數據庫中的項目時,會生成一個數組,例如

 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`

所以。 我有點迷路了,也許解決方法很簡單。 您可以提出最佳做法嗎?

您不是在復制它,而是在引用它。

您需要制作一個數組的硬拷貝,可以使用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將是使用修改的數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM