2017-09-29 38 views
0

我正在嘗試在node.js中構建一個同步兩個不同系統的API,並且我無法分解從源系統接收的對象數組。 基本上,我收到一個數組,看起來有點像這樣:如何根據數組鍵的列表從JSON數組中刪除項目?

sourcedata = { 
     "items": [ 
      { "id": "item1", 
      "some fields": {...array of some fields }, 
      "more fields": {another block of fields} 
      }, 
     { "id": "item2", 
     "some fields": {...array of some fields }, 
     "more fields": {another block of fields} 
       }] 
    } 

我也有是ID的三個陣列 - 新的(意味着我必須把它們發送到目標系統),舊(以從目標中刪除)以及同時出現的那些 - 我需要檢查特殊標籤以查看它們是否與衆不同。

例如

newitems = [id1,id2,id3] 
existingItems [id4,id5,id6] 
deletedItems = [id7,id8] 

我想要做的就是創建新的陣列,將只包含新的和現有項目的數據,這樣我就可以處理,並將它們發送到目標系統而不掃描sourcedata陣列的每個關鍵並決定要做什麼。我知道如何做到這一點,當我比較簡單的數組,但在這裏我需要複製整個對象和所有的領域,我不能 找到正確的方法來做到這一點。任何幫助,將不勝感激。

回答

0

您可以使用filter函數。它根據您的情況過濾掉數組的元素。您可以將它與includes函數一起使用,以確定某個事物是否在數組中。例如:

sourceArray = [ 
    { 
    id: 'a' 
    }, 
    { 
    id: 'b' 
    }, 
    { 
    id: 'c' 
    }, 
    { 
    id: 'd' 
    } 
] 

var toDelete = ['c', 'b'] 

sourceArray = sourceArray.filter(x => !toDelete.includes(x.id)) 
// some items in sourceArray have now been removed. 

注意filterincludes可能需要一個最近的的NodeJS版本。

+0

我設法做到這一點之前,但仍然不知道如何將它應用到我的更復雜的數組,並且我正在尋找最有效的方法來從主數組中分離新的和現有的項目。要從目標系統中刪除項目,我需要的只是ID,但爲了發送更新,我需要整個數據集。 – NadavM

+0

@ user3541347這種方法應該適用於所有陣列。你有什麼樣的特殊要求讓你認爲它不適用於「複雜」陣列? – maowtm

+0

我的錯誤 - 我忘記引用數組了 - 基本上我的原始變量在容器中有數組,所以我不得不簡單地引用正確的數組。 工程就像一個魅力! – NadavM