javascript - Är detta ett bra sätt att klona ett objekt i ES6?


Att googla efter "javascript clone object" ger några riktigt konstiga resultat, några av dem är hopplöst föråldrade och några är bara för komplexa, är det inte lika enkelt som bara:

let clone = {...original};

Finns det något fel på detta?

Svar #1

Detta är bra för grundläggande kloning. Objektspredningen är en standarddel av ECMAScript 2018.

För djup kloning kommer du att behöva en annan lösning.

const clone={...original} för att göra en ytlig kopia

const newobj={...original, prop: newOne} för att på ett oföränderligt sätt lägga till en annan egenskap till originalet och spara som ett nytt objekt.

Svar #2

REDIGERA: När detta svar postades var {...obj}-syntaxen inte tillgänglig i de flesta webbläsare. Numera bör det vara okej att använda den (om du inte behöver stödja IE 11).

Använd Object.assign.

https://developer.mozilla.org/sv/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

var obj = { a: 1 };
var copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }

Men detta kommer inte att göra en djup kopia. Det finns inget inbyggt sätt att göra djupkopiering än så länge.

REDIGERA: Som @Mike 'Pomax' Kamermans nämnde i kommentarerna, kan du göra en djup kopia av enkla objekt (dvs. inga prototyper, funktioner eller cirkulära referenser) med JSON.parse(JSON.stringify(input))

Relaterade artiklar