在JavaScript中从对象复制某些属性的最有效方法是什么?

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这样的转换层一起使用.

  • 请注意,这还将创建一个“_id”变量。 (5认同)

Pra*_*lan 7

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)

  • 我想知道这怎么能比 OP 所做的分配更快。 (2认同)

tri*_*cot 5

您将进行两次浅复制:一次使用对象文字,另一次使用Object.assign. 所以只需使用两者中的第一个:

const newUser = {firstName: user.firstName, lastName: user.lastName};
Run Code Online (Sandbox Code Playgroud)