es soll Array.slice()
lassen Sie mich eine Kopie eines Arrays erstellen, und dann kann ich diese Kopie ändern, ohne das ursprüngliche Array zu ändern, aber wenn ich Verwenden Sie Array.forEach()
über die Kopie zum Löschen einiger Werte, diese Werte werden auch aus dem ursprünglichen Array entfernt. Hat jemand eine Idee, warum das passiert? Hier ist der Code, den ich verwendet habe:Array.forEach() und Array.slice() zusammen funktioniert nicht
var originalArray = [
{ id: 1, name: 'Sales', datasources: [
{ id:1 , name: 'datasource1', fields: [] },
{ id:2 , name: 'datasource2', fields: [] },
] },
{ id: 4, name: 'Accounts', datasources: [
{ id:3 , name: 'datasource3', fields: [] },
{ id:4 , name: 'datasource4', fields: [] },
] },
{ id: 123, name: 'my datasources', datasources: [
{ id:1 , name: 'datasource1', fields: [] },
{ id:2 , name: 'datasource2', fields: [] },
{ id:3 , name: 'datasource3', fields: [] },
{ id:4 , name: 'datasource4', fields: [] },
] },
{ id: 12, name: 'shared datasources', datasources: [
{ id:13 , name: 'myshared datasource', fields: [] },
{ id:16 , name: 'hello test', fields: [] },
] },
];
var copyOfOriginalArray = originalArray.slice();
copyOfOriginalArray.forEach((folder, index) => {
folder.datasources = folder.datasources.filter((o) => { return o.name.trim().toLowerCase().includes('hello'); });
});
JSON.stringify(originalArray);
JSON.stringify(copyOfOriginalArray);
„Für Objektreferenzen (und nicht das eigentliche Objekt), in Scheiben schneiden Kopien Referenzen in das neue Array-Objekt Sowohl die ursprüngliche und die neue Array sich auf dasselbe Objekt beziehen. Wenn sich ein referenziertes Objekt ändert, sind die Änderungen für das neue und das ursprüngliche Array sichtbar. " aus der MDN-Dokumentation von Array.prototype.slice() –