Hier Entfernen ist mein Code:"Objekt mit einem Array-Feld" aus einem Array in Javascript
var subMed = [ {med:'bm', sub:[ 'a' , 'b' ]} , {med:'bm', sub:[ 'c' , 'd' , 'e' ]} ];
var sal = [ {num:"1",amount:"500"} ];
var t = {Class:"1", subMeds:subMed, numOfSub:2, sals:sal };
var infoAcademic = [];
infoAcademic.push(t);
subMed = [ {med:'em', sub:[ 'p']} , {med:'bm', sub:[ 'r' , 's' ]} ];
sal = [ {num:"2",amount:"1500"},{num:"1",amount:"700"} ];
t = {Class:"1", subMeds:subMed, numOfSub:1, sals:sal };
infoAcademic.push(t);
var tempObj = infoAcademic[1]; // an object
var mediumSubjects = tempObj["subMeds"]; // an array
console.log(mediumSubjects);
for(i=0;i<mediumSubjects.length;i++){
var temp = {}; // object
temp = mediumSubjects[i];
if(temp["med"] == 'bm'){
tempObj["numOfSub"] = tempObj["numOfSub"] - temp["sub"].length;
var salArr = tempObj["sals"]; // array
var j = salArr.length;
if(salArr.length > 0){
while(j--){
var salObj = salArr[j]; // object
var howManySub = salObj["num"];
if(howManySub > tempObj["numOfSub"]){
salArr.splice(j,1);
}
}
}
console.log("removing from the medSubjects list: ");
console.log(temp);
var removed = mediumSubjects.splice(i, 1);
break;
}
}
console.log("removed element: ");
console.log(removed);
console.log(mediumSubjects);
Wenn ich diesen Code dies einer Editor js Online schreiben https://js.do/, gibt den Code Ergebnis wie pro erwartet. Aber wenn ich diesen Code in eine onclick
-Funktion meiner JSP-Seite einbinde, wird kein Element aus dem Array mediumSubjects
entfernt. Das entfernte Element zeigt leer.
Jedoch wenn ich diesen Teil auf Kommentar:
tempObj["numOfSubj"] = tempObj["numOfSub"] - temp["sub"].length;
var salArr = tempObj["sals"]; // array
var j = salArr.length;
if(salArr.length > 0){
while(j--){
var salObj = salArr[j]; // object
var howManySub = salObj["num"];
if(howManySub > tempObj["numOfSub"]){
salArr.splice(j,1);
}
}
}
der Code verhält sich überraschenderweise als Expected sie das Element aus dem Array entfernt mediumSubjects
.
Gibt es ein Synchronisierungsproblem oder etwas anderes? Warum so ein ungewöhnliches Verhalten?
N.B. Ich muss Elemente aus dem Array entfernen mediumSubjects
, so delete
wird hier nicht funktionieren.
Was ist das Problem, vor dem Sie stehen? Haben Sie ein größeres Array als im Beispiel gezeigt? –
Der von Ihnen gepostete Code funktioniert. Nach dem Ausführen hat 'medSub' nur ein Objektelement. Der Konsolenbefehl gibt auch 'removed element: [object Object]' aus (nicht leer wie es in Ihrer Frage steht) – jrook
Ja @PankajShukla –