Как найти разницу двух вложенных массивов объектов на основе их OBJECTID? - PullRequest
0 голосов
/ 28 февраля 2020

Я изо всех сил пытаюсь найти ответ на этот код. Я знаю, как фильтровать массивы по строкам / числам, но как фильтровать вложенный массив объектов на основе 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"}}
  ]

Это просто меньший «пример» кода, который у меня есть на самом деле. Я попытался сделать для l oop и проверить OBJECTID, но страница просто упала из-за бесконечных циклов. Пожалуйста, кто-нибудь может помочь?

Ответы [ 4 ]

0 голосов
/ 28 февраля 2020

1) Соберите ids в массив test_ids, который необходимо отфильтровать
2) Используйте фильтр для массива geo json и проверьте, не включен ли он в указанный выше массив.

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);
0 голосов
/ 28 февраля 2020

Попробуйте приведенный ниже код, возможно, он даст вам представление. Но я не уверен, почему он не работает, как ожидалось

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)
0 голосов
/ 28 февраля 2020

Вот простое решение, если вам нужно найти объекты в массиве по нескольким значениям

const neededIDs = [1,2,3, ...];

const neededObjects = geojson.filter(item => neededIDs.includes(item.properties.ID));

0 голосов
/ 28 февраля 2020
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...