/ / Los valores no se eliminan de forma coherente de una matriz si se encuentran en otra matriz: javascript, matrices, json, análisis

Los valores no se eliminan sistemáticamente de una matriz si se encuentran en otra matriz: javascript, matrices, json, análisis

Tengo lo siguiente JSFiddle donde estoy tratando de ordenar una cadena json de datos de pokemon en dos arreglos de acuerdo a lo lejos que están de mí.

var pokemon = JSON.parse(JSONoriginal); //*See JSFiddle link for full JSON String*

//encounter_ids are unique to each spawned pokemon, use these to look for & remove duplicates
for(var x=0; x <= pokemon.result.length-1; x++){
var aPokemon = {
name: pokemon.result[x].pokemon_id,
encounter_id: pokemon.result[x].encounter_id,
expiration_timestamp_ms: pokemon.result[x].expiration_timestamp_ms,
latitude: pokemon.result[x].latitude,
longitude: pokemon.result[x].longitude
};
if(pokemon.result[x].expiration_timestamp_ms === undefined){
//Check if pokemon"s already been put into nearby array, if so then we don"t need to do anything
var a = nearby.filter(function(a){
return a.encounter_id === aPokemon.encounter_id;
})[0];
if(a === undefined){
//Put in nearby Array because we don"t have a location
nearby.push(aPokemon);
}
}else{
//Check if pokemon"s already been put into nearby array, if so then remove it from there
var b = nearby.filter(function(b){
return b.encounter_id === aPokemon.encounter_id;
})[0];
if(b !== undefined){
nearby.splice(nearby.indexOf(b),1);
}
//Check if pokemon"s already been put into immediate array, if so then we don"t need to do anything
var c = immediate.filter(function(c){
return c.encounter_id === aPokemon.encounter_id;
})[0];
if(c === undefined){
//Put it in immediate Array because we can locate & display them
immediate.push(aPokemon);
}
}
}

Puedo analizar mi cadena json de ejemplo y rellenar mis dos arreglos, pero parece que algunos pokemon no se eliminan de la Nearby[] matriz cuando deberían estar (cuando están siendo colocados en el Immediate[] formación). ¿Alguien puede detectar el error en mi lógica? ¿Cómo puedo hacer que este bucle funcione correctamente?

Respuestas

1 para la respuesta № 1

Entonces, ¿el Rattata, Krabby y Squirtle con esas identificaciones en la sección inmediata no deberían aparecer en la sección cercana? El problema es que solo está comprobando si hay duplicados si hay un expiration_timestamp_ms, que las segundas entradas no tienen.

[Editar]

Esto debería funcionar: compruebe si una entrada ya está en la matriz inmediata cuando la empuja hacia un lugar cercano. He actualizado tu JSFiddle:

var a = nearby.filter(function(a){
return a.encounter_id === aPokemon.encounter_id;
})[0] || immediate.filter(function(c){
return c.encounter_id === aPokemon.encounter_id;
})[0];