Entfernen Sie den Wert aus Objekt ohne mutation
Was ist ein guter und kurzer Weg zum entfernen eines Werts aus einem Objekt auf einen bestimmten Schlüssel ohne mutierend dem ursprünglichen Objekt?
Ich würde gerne etwas machen wie:
let o = {firstname: 'Jane', lastname: 'Doe'};
let o2 = doSomething(o, 'lastname');
console.log(o.lastname); //'Doe'
console.log(o2.lastname); //undefined
Ich weiß, es gibt eine Menge von Unveränderlichkeit Bibliotheken für solche Aufgaben, aber ich möchte, um Weg zu bekommen ohne eine Bibliothek. Aber um dies zu tun, die eine Voraussetzung wäre, um einen leichten und kurzen Weg, die verwendet werden können in dem gesamten code, ohne die Abstraktion der Methode als eine utility-Funktion.
E. g. für die addition eines Wertes ich Folgendes tun:
let o2 = {...o1, age: 31};
Dieser ist Recht kurz, leicht zu merken und braucht nicht eine utility-Funktion.
Gibt es so etwas wie dies für das entfernen des einen Wert? ES6 ist sehr willkommen.
Vielen Dank!
- "Entfernen Sie einen Wert ohne mutierend das Objekt" keinen Sinn. Sie können nicht entfernen, aus etwas, und halten Sie es intakt an der gleichen Zeit. Was Sie tatsächlich tun, ist eine teilweise Kopie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update:
Könnte man entfernen einer Eigenschaft aus einem Objekt mit einer kniffligen Destructuring assignment:
Allerdings, wenn die Eigenschaft name, die Sie entfernen möchten, ist statisch, dann könnte man auch entfernen Sie es mit einem einfachen Einzeiler:
Der einfachste Weg ist einfach zuOder könnte man-Klon, Ihr Objekt vor mutiert es:Alternativ könnte man
ohne
- Funktion vonlodash
utility library:Es ist verfügbar als Teil von lodash Paket, oder als standalone - lodash.weglassen Paket.
a2 = a1.filter(el => el.id !== id)
weglassen eines Elements in einem array von einem bestimmten id. Gibt es keine solche Sache für ein Objekt?keep_if
const {[prop], ...rest} = obj
Arbeit? Warum haben Sie zum zuweisen der Eigenschaft extrahiert, um eine neue variable (omit
in diesem Fall)?[prop]
Feld (omit
)?prop
ist bereits gemacht, so müssen Sie definieren einen neuen Namen.const removeStuff = ['this', 'that']; let newObj = _.omit(originalObj, removeStuff);
doSomething({ 1: 'q', 2: 'w' }, 1) // => { '2': 'w' }
. Übergeben Zeichenfolge statt einer Nummer kaum Sinn macht, da JS leckereien Reihe und es ist stringified-version als die gleichen Schlüssel.Uncaught SyntaxError: Unexpected token ...
). Ich habe versucht, transpiling es mit Babel, aber noch keine Freude. Hier ist ein link zu einer JSFiddle. Wenn ich einen Fehler gemacht habe, können Sie mir bitte zeigen, was ich falsch gemacht habe? TIA.const {[p]: val,...o2} = o;
no-unused-vars
Regel, es ist nur regex.Mit ES7-Objekt destructuring:
a
wird in einer variable gespeichertconst x = 'a'
?const { a,b, ...noA } = myObject;
console.log(noA); // => {c: 3 }
one-line-Lösung
Als Vorschlag in die Kommentare oben wenn Sie erweitern möchten, um mehr als ein Element aus Ihrem
object
ich möchtefilter
. undreduce
zB
JS:
mit lodash cloneDeep und löschen
(Hinweis: lodash Klon kann stattdessen verwendet werden, für flache Objekte)