5

これはどのように私はそれをやってきている。ES6/ES7で1つ以上のプロパティを省略した浅いコピーオブジェクト?

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' }

はきれい、簡単な方法はありますか?

+0

私は理解していません。あなたはnewPropsに小道具をコピーする最も重要な行を書いていません。 「...」とは何ですか? – Gavriel

+0

@ william.taylor.09、重複しないでください。彼はコピーする方法を知っていますが(彼はその行を表示していませんが)、ブラックリストの一部を除いてすべてのプロパティをコピーしたいです。 – Gavriel

+0

@Gavrielはこの行を基本的には浅くコピーしませんnewオブジェクト 'var newProps = {.. .props} '? 'var newProps = Object.assign({}、props)' –

答えて

8

あなたは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 

(すでに使用していた同じrest/spread properties proposal for ES7付き)

+0

ええ、私はこれが最良の選択だと思う - 私はこれまで同様のことをしていた。私はちょっと明白な何かがあることを望みます... –

+0

私はそれがかなり明示的だと思います...もし望むなら、適切に名前付きの関数 '(key、{[key]:_、rest})=> rest'それを呼ぶ。 – Bergi

+1

'/ * eslint no-unused-vars:["エラー "、{" varsIgnorePattern ":" _ "} * /'このテクニックを使用しているときにeslintエラーを取り除くのに便利です – 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

ありがとう@gavriel。ええ、私はクローン機能で私のロジックを包むことができたと思うのですか?私はちょうどもっと簡潔な方法があることを望んでいた。 –

関連する問題