5

ten sposób robiłem go:Obiekt z płytką kopią, pomijając jedną lub więcej właściwości w ES6/ES7?

var props = { id: 1, name: 'test', children: [] } 
 

 
//copy props but leave children out 
 
var newProps = { ...props } 
 
delete newProps.children 
 

 
console.log(newProps) // { id: 1, name: 'test' }

Czy jest czystsze, prostszy sposób?

+0

ja nie rozumiem. Nie napisałeś najważniejszej linii, w której kopiujesz rekwizyty do newProps. Co to jest "..."? – Gavriel

+0

@ william.taylor.09, nie duplikuj. On wie, jak kopiować (po prostu nie pokazywał tej linii), ale chce skopiować wszystkie właściwości, z wyjątkiem niektórych na czarnej liście. – Gavriel

+0

@Gavriel nie robi tego w zasadzie płytkiej kopii właściwości nowego obiektu 'var newProps = {.. .props} '? Trochę jak robi 'var newProps = Object.assign ({}, rekwizyty)' –

Odpowiedz

8

można użyć destructuring assignment:

var props = { id: 1, name: 'test', children: [] } 

var {children:_, ...newProps} = props; 
console.log(newProps) // { id: 1, name: 'test' } 
console.log(_) // [] - as an "empty" placeholder 

(z tym samym rest/spread properties proposal for ES7, które zostały już użyciem)

+0

Tak, myślę, że to najlepsza opcja - robiłem coś podobnego wcześniej. Chciałbym tylko, żeby było coś bardziej jednoznacznego ... –

+0

Myślę, że jest to dość wyraźne ... Jeśli chcesz, możesz napisać trafnie nazwaną funkcję '(key, {[key]: _, ... rest}) => rest' i zadzwoń do tego. – Bergi

+1

'/ * eslint no-unused-vars: [" error ", {" varsIgnorePattern ":" _ "] * /' Przydaje się, aby pozbyć się błędów eslint podczas korzystania z tej techniki – icc97

1

var props = { id: 1, name: 'test', children: [] } 
 

 
function clone(orig, blacklistedProps) { 
 
    var newProps = {}; 
 
    Object.keys(props).forEach(function(key) { 
 
     if (!blacklistedProps || blacklistedProps.indexOf(key) == -1) { 
 
      newProps[key] = props[key]; 
 
     } 
 
    }); 
 
    return newProps; 
 
} 
 
var newProps = clone(props, ['children']); 
 
console.log(newProps) // { id: 1, name: 'test' } 
 
var newProps1 = clone(props); 
 
console.log(newProps1) // { id: 1, name: 'test', children:[] }

+0

Dzięki @gavriel. Tak, sądzę, że mógłbym zawrzeć moją logikę w funkcji klonowania. Miałem tylko nadzieję, że istnieje bardziej zwięzły sposób. –

Powiązane problemy