如何根据数组键列表从JSON数组中删除项?

时间:2017-09-29 16:23:46

标签: arrays json node.js

我试图在node.js中构建一个同步两个不同系统的API,而且我无法分解从源系统收到的一系列对象。 基本上,我收到一个看起来有点像这样的数组:

    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数组 - 新的ID(意味着我必须将它们发送到目标系统),旧的ID(从目标中删除),以及两者都出现的ID - 我需要检查的一个特殊的标签,看看它们是否不同。

e.g。

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

我尝试做的是创建只包含NEW和EXISTING项数据的新数组,这样我就可以处理并将它们发送到目标系统,而无需扫描每个键的sourcedata数组。决定做什么。当我比较简单数组时,我知道如何做到这一点,但在这里我需要复制整个对象及其所有字段,我不能这样做 找到合适的方法。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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。