5

Questo è il modo che ho fatto è:Oggetto copia superficiale che lascia fuori una o più proprietà in 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' }

C'è un detergente, modo più semplice?

+0

Non capisco. Non hai scritto la riga più importante, dove copi puntelli su newProps. Cos'è "..."? – Gavriel

+0

@ william.taylor.09, non duplicato. Lui sa come copiare (non ha appena mostrato quella linea) ma vuole copiare tutte le proprietà tranne alcune in una lista nera – Gavriel

+0

@Gavriel questa linea non fondamentalmente copia le proprietà del nuovo oggetto 'var newProps = {.. .props} '? Un po 'come fare 'var newProps = Object.assign ({}, oggetti di scena)' –

risposta

8

si potrebbe usare un 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 

(con lo stesso rest/spread properties proposal for ES7 che si sta già utilizzando)

+0

Sì, penso che questa sia l'opzione migliore - stavo facendo qualcosa di simile prima. Spero solo che ci sia qualcosa di più esplicito ... –

+0

Penso che sia già abbastanza esplicito ... Se vuoi, puoi scrivere una funzione con nome appropriato '(chiave, {[chiave]: _, ... resto}) => riposa' e chiamalo. – Bergi

+1

'/ * eslint no-unused-vars: [" error ", {" varsIgnorePattern ":" _ "] * /' È utile per sbarazzarsi degli errori di eslint quando si utilizza questa tecnica – 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

Grazie a @gavriel. Sì, per quello penso che potrei avvolgere la mia logica in una funzione di clonazione. Speravo solo che ci fosse un modo più conciso. –