2014-04-25 62 views
0

我有一個呈現對象的數組如下:比較對象的數組,並刪除重複和更新 - 使用Javascript

0: Object 
ConsolidatedItem_catalogId: "080808" 
ConsolidatedItem_catalogItem: "undefined" 
ConsolidatedItem_cost: "0" 
ConsolidatedItem_description: "Test Catalog Item" 
ConsolidatedItem_imageFile: "27617647008728.jpg" 
ConsolidatedItem_itemNumber: "1234" 
ConsolidatedItem_quantity: "1" 
ConsolidatedItem_source: "CAT" 
ConsolidatedItem_status: "02" 
ConsolidatedItem_umCode: "EA" 

1: Object 
ConsolidatedItem_catalogId: "" 
ConsolidatedItem_catalogItem: "undefined" 
ConsolidatedItem_cost: "0" 
ConsolidatedItem_description: "ALARM,SHUTDOWN SYSTEM,AXIOM,XP3, 0-1500 PSIG, HIGH AND LOW PRES Testing" 
ConsolidatedItem_imageFile: "" 
ConsolidatedItem_itemNumber: "10008" 
ConsolidatedItem_quantity: "1" 
ConsolidatedItem_source: "INV" 
ConsolidatedItem_status: "02" 
ConsolidatedItem_umCode: "EA" 

我想更新,如果它再次添加刪除對象,或更新目的。最好用新值更新對象。我的代碼如下:

var result = $.grep(finalObject, function(e) { 
      return e.ConsolidatedItem_itemNumber == o.ConsolidatedItem_itemNumber; 
     }); 
     console.log(result); 
     if (result.length == 0) { 
      finalObject.push(o); 
      shoppingCounter = finalObject.length; 
      $('#numberShoppedItems').text(shoppingCounter); 
      console.log(finalObject); 
     } else if (result.length == 1) {  
      finalObject.filter(function(x){ 
       result = x; 
       console.log(result); 
       return x == result.ConsolidatedItem_itemNumber; 

      }); 
     } else { 
      alert('Multiples Found'); 
     } 
    } 

我試圖得到確切的對象和操縱數據的多種方式,但他們都失敗了。我寧願更新對象,如果CatalogItem_itemNumber保持相同的值,如果CatalogItem_quantity不同 - 將CatalogItem_quantity值一起添加並更新對象數組。

我不需要一個確切的答案,在正確的方向微調將奇蹟,雖然。我在過去的幾個小時裏查看了幾個相關的問題,但他們似乎都沒有解決這個問題。如果您知道有問題的答案,請隨時鏈接。我可能錯過了它。

沒有Underscore.js請

+0

爲什麼,如果你已經在使用它沒有jQuery的?或者:你爲什麼將'$ .grep'與'Array :: filter'混合? – Bergi

+0

我刪除了jQuery限制。這很令人困惑,我們在沒有jQuery的情況下進行重構,但如果它現在可以更容易就沒問題。 – user1435281

+0

不,不,避免jQuery完成這個任務是個好主意,我只是很驚訝地看到你自己使用了它。只需重構'$ .grep'即可。 – Bergi

回答

0

解決以下方式:

1)驗證對象不爲空。

2.)在對象上使用.some()來遍歷它。

3.)檢查finalObject(現在是e)是否與我組裝的臨時對象o中的鍵匹配。

4.)更新需要更新的值並返回true;

注意:原本我打算通過其索引刪除對象並將其替換爲新對象。這也可以通過使用.splice()和獲取當前對象的索引數組你是在工作

這裏是更新版本:

if (o.ConsolidatedItem_quantity != '') { 

    var result = $.grep(finalObject, function(e) { 
     return e.ConsolidatedItem_itemNumber == o.ConsolidatedItem_itemNumber; 
    }); 
    if (result.length == 0) {...} 
    else { 
     finalObject.some(function (e) { 
      if(e.ConsolidatedItem_itemNumber == o.ConsolidatedItem_itemNumber){ 
       var a; 
       a = +e.ConsolidatedItem_quantity + +o.ConsolidatedItem_quantity; 
       e.ConsolidatedItem_quantity = a.toString(); 
       document.getElementById(o.ConsolidatedItem_itemNumber).value=a; 
       return true; 
      }; 
     }); 
    } 
} 
0

當您找到匹配的記錄,您可以通過使用$.extend

 $.extend(result[0], o) 

這將更新就地在finalObject數組對象更新。

或者,如果您想使用過濾器,則需要將新對象插入到數組中。

 finalObject = finalObject.filter(function(x) { 
      return x !== result[0]; 

     }); 
     finalObject.push(o) 

在這裏,我們讓所有不屬於不等於結果在finalObject接收的合成數組中要返回的記錄。在下一行中,我們將添加新記錄。

相關問題