Ich habe Probleme, die Spleißmethode in einem verschachtelten Array in einer allgemeinen Weise zu verwenden. Also was ich will ist, um Objekte in "BigArray" s "NestedArray" s zu löschen, wenn "FilterArray" keine Referenz für das Objekt haben.Löschen nicht übereinstimmender Objekte in verschachtelten Array
Ich habe ein Beispiel gemacht, was ich tun möchte. Wenn Sie eine Lösung bekommen, wie ich es in nativem Javascript verbessern kann oder mit Lodash, geben Sie mir gerne Input. Ich bin wirklich festgefahren.
Erwartetes Ergebnis sollte sein:
sort.unsortedArray = { "bigArray" : [
{"id": 1, "text" : "This should be visible when done",
"nestedArray": [
{ "id": 2, "nestedText": "Sort me out!" }
]
},
{ "id": 2, "text" : "This should be visible when done",
"nestedArray": [
{ "id": 2, "nestedText": "This one should be visible in the coming array" }
]
}]}
Heres ein codepen dafür.
var sort = this;
var init = function(){
sort.outObjects();
};
sort.filterArray = { "filter" : [
{ "id": 3, "groupId": 1 },
{ "id": 2, "groupId": 2 }]};
sort.unsortedArray = { "bigArray" : [
{"id": 1, "text" : "This should be visible when done",
"nestedArray": [
{ "id": 1, "nestedText":"Sort this one out!" },
{ "id": 2, "nestedText": "Sort me out!" },
{ "id": 3, "nestedText": "This one should be visible in the coming array"}]},
{ "id": 2, "text" : "This should be visible when done",
"nestedArray": [
{ "id": 1, "nestedText": "Sort me out!" },
{ "id": 2, "nestedText": "This one should be visible in the coming array" },
{"id": 3, "nestedText": "Sort this one out!" }]}
]},
sort.outObjects = function(){
//Check that we got the objects in same scope
if(sort.filterArray && sort.unsortedArray){
//Loop through "bigArray" object
for(var i = 0; i< sort.unsortedArray.length; i++){
console.log("sort.unsortedArray.length : ", sort.unsortedArray.length);
//Loop through each "nestedArray":s objects
for(var j = 0; j< sort.unsortedArray[i].nestedArray.length; j++){
console.log("sort.unsortedArray[i].nestedArray.length : ", sort.unsortedArray[i].nestedArray.length);
//Loop through filterArray object and compare each object in nested array, if they dont match, delete them.
for(var k = 0; k< sort.filterArray.length; k++){
console.log("sort.filterArray.length : ", sort.filterArray.length);
if(sort.filterArray[k].id != sort.unsortedArray[i].nestedArray[j].id){
//Delete unmatching object from unsortedArray
sort.unsortedArray[i].nestedArray.splice(j,1);
console.log("sort.unsortedArray after splice : ", sort.unsortedArray);
}
}
}
}
}
else{
console.log("Missing connection to object",sort.filterArray, sort.unsortedArray);
}
}
init();
was bedeuten mit "if "filterArray" dosen't eine Referenz für das Objekt haben"? '" bigArray "' hat kein Objekt mit 'groupId' Eigenschaft – RomanPerekhrest
@RomanPerekrest, genau! Das ist das Problem, vor dem ich stehe. es ist nur ein Verweis auf die bigArray: s Objekte. –
ok, zeige, wie das erwartete Ergebnis aussehen sollte – RomanPerekhrest