【问题标题】:How to find the difference of two nested Object Arrays based on their OBJECTID?如何根据 OBJECTID 找出两个嵌套对象数组的差异?
【发布时间】:2020-02-28 14:49:49
【问题描述】:

我正在努力寻找此代码的答案。我知道如何使用字符串/数字过滤数组,但是如何根据 OBJECTID 过滤嵌套的对象数组? (抱歉,这是一个与我正在做的事情更相关的例子)

let geojson = [
  {properties: {OBJECTID: 6249646, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}}, 
  {properties: {OBJECTID: 6249646, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}}, 
  {properties: {OBJECTID: 6249647, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}},
  {properties: {OBJECTID: 6249647, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}},
  {properties: {OBJECTID: 6249648, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}},
  {properties: {OBJECTID: 6249649, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}} 
  ]


let newjson = [
  {properties: {OBJECTID: 6249647, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}},
  {properties: {OBJECTID: 6249648, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}},
  {properties: {OBJECTID: 6249649, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}},
  {properties: {OBJECTID: 6249650, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}},
  {properties: {OBJECTID: 6249651, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}}
  ]

What I want: [
    {properties: {OBJECTID: 6249650, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}},
    {properties: {OBJECTID: 6249651, FeatureCode: 10185, Version: 3, VersionDate: "1/25/2018"}}
  ]

这只是我实际拥有的代码的一个较小的“示例”。我尝试了一个 for 循环,并检查了 OBJECTID,但由于无限循环,页面刚刚崩溃。请问有人可以帮忙吗?

【问题讨论】:

标签: javascript arrays object


【解决方案1】:
geojson.filter( obj => obj.properties.ID == 1 || obj.properties.ID == 2)

为什么不使用过滤器?

说明: 您可以只返回 true 或 false 来告诉过滤器方法是否符合您的条件。 filter 方法将调用您的内部函数并将数组的每个元素作为参数传递。

如果你有一个更大的数组,你可以这样做:

fil=[1,2,4];
geojson.filter( obj => fil.indexOf(obj.properties.ID) !== -1)

【讨论】:

    【解决方案2】:

    试试下面的代码,也许它会给你一个想法。但我不确定为什么它没有按预期工作

    let geojson = [{properties: {ID: 1}, name: "Jimmy"}, 
                   {properties: {ID: 2}, name: "Joe"}, 
                   {properties: {ID: 3}, name: "Ji"}, 
                   {properties: {ID: 4}, name: "my"}]
    
    
    let test = [{properties: {ID: 3}, name: "Ji"}, {properties: {ID: 4}, name: "my"}]
    
    var mappedTestArray = test.map(testObject => {
        return testObject.properties
    })
    
    console.log(mappedTestArray)
    
    let geoJson = geojson.filter(geoObject => {
        console.log(geoObject.properties)
        console.log(mappedTestArray.includes(geoObject.properties))
       return mappedTestArray.some(el => el === geoObject.properties)
    })
    
    console.log(geoJson)

    【讨论】:

      【解决方案3】:

      如果您需要通过多个值在数组中查找对象,这是一个简单的解决方案

      const neededIDs = [1,2,3, ...];
      
      const neededObjects = geojson.filter(item => neededIDs.includes(item.properties.ID));
      
      

      【讨论】:

      【解决方案4】:

      1) 将ids 收集到需要过滤的test_ids 数组中
      2)对geojson数组使用过滤器,检查是否不包含在上面的数组中。

      let geojson = [
        { properties: { ID: 1 }, name: "Jimmy" },
        { properties: { ID: 2 }, name: "Joe" },
        { properties: { ID: 3 }, name: "Ji" },
        { properties: { ID: 4 }, name: "my" }
      ];
      
      let test = [
        { properties: { ID: 3 }, name: "Ji" },
        { properties: { ID: 4 }, name: "my" }
      ];
      
      const test_ids = test.map(x => x.properties.ID);
      
      const res = geojson.filter(gj => !test_ids.includes(gj.properties.ID));
      
      console.log(res);

      【讨论】:

        猜你喜欢
        • 2020-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-23
        • 2016-12-28
        • 2020-03-11
        相关资源
        最近更新 更多