1
votes

Comment trouver la différence de deux tableaux d'objets imbriqués en fonction de leur OBJECTID?

J'ai du mal à trouver une réponse à ce code. Je sais comment filtrer les tableaux avec des chaînes / nombres, mais comment filtrer un tableau d'objets imbriqués basé sur OBJECTID? (Excusez-moi, ceci est un exemple plus pertinent de ce que je fais)

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"}}
  ]

Ceci est juste un plus petit «échantillon» du code que j'ai réellement. J'ai essayé de faire une boucle for et de vérifier les OBJECTID, mais la page vient de planter en raison de boucles infinies. Quelqu'un pourrait-il vous aider?


1 commentaires

4 Réponses :


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

0 commentaires

0
votes

Essayez le code ci-dessous, peut-être que cela vous donne une idée. Mais je ne sais pas pourquoi cela ne fonctionne pas comme prévu

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 commentaires

0
votes

Voici la solution simple si vous avez besoin de trouver des objets dans le tableau par plusieurs valeurs

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

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


2 commentaires

ryanpeden.com/javascript-indexof-vs-includes-performance Je sais , c'est juste un tout petit peu plus lent. ;-)


Laissons ce problème aux moteurs des navigateurs =)



0
votes

1) Rassemblez les identifiants dans le tableau test_ids qui doivent être filtrés
2) Utilisez un filtre sur le tableau geojson et vérifiez s'il n'est pas inclus dans le tableau ci-dessus.

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 commentaires