dpk*_*han 13 javascript ecmascript-6
说,我有一个对象:
const user = {_id: 1234, firstName: 'John', lastName: 'Smith'}
Run Code Online (Sandbox Code Playgroud)
我想创建另一个没有_id
密钥的对象:
const newUser = {firstName: 'John', lastName: 'Smith'}
Run Code Online (Sandbox Code Playgroud)
我用这个:
const newUser = Object.assign({}, {firstName: user.firstName, lastName: user.lastName})
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
mad*_*ox2 23
您可以通过解构和对象休息属性来实现它:
const user = {_id: 1234, fistName: 'John', lastName: 'Smith'}
const {_id, ...rest} = user;
console.log(rest);
Run Code Online (Sandbox Code Playgroud)
但是,rest/rpread属性仍然是ecmascript的提议(目前处于第3阶段).您可以将它与babel这样的转换层一起使用.
Array#reduce
用方法做,用方法做Object.keys
。
const user = {
_id: 1234,
fistName: 'John',
lastName: 'Smith'
};
var res = Object.keys(user).reduce(function(obj, k) {
if (k != '_id') obj[k] = user[k];
return obj;
}, {});
console.log(res);
Run Code Online (Sandbox Code Playgroud)
您将进行两次浅复制:一次使用对象文字,另一次使用Object.assign
. 所以只需使用两者中的第一个:
const newUser = {firstName: user.firstName, lastName: user.lastName};
Run Code Online (Sandbox Code Playgroud)