使用扩展运算符设置键名

Set keyname with spread operator

是否可以将键名动态设置为传播运算符?

例如我有:

'first, second, third'.split(',');
// Array(3) : [ 'first', 'second', 'third' ]

我想要一个这样的对象

{ 'first': 'first', 'second': 'second', 'third': 'third' }

通过现在这样做我得到:

{ ...'first, second, third'.split(',') };
// { 1: 'first', 2: 'second', 3: 'third' }

此时我可以动态设置它还是必须遍历并手动设置?

我最终将两个答案结合起来使用:

const toObject = str => Object.assign(...str.split(/\s*,\s*/).map(key => ({ [key]: key })));

您可以将 key/value 对的列表展开到对象分配中:

  Object.assign(...'first, second, third'.split(',').map(key => ({[key]: key})))

Jonas 的解决方案很聪明。我喜欢。这是一个替代方案:

function toObject(str) {
  const parts = str.split(/\s*,\s*/);
  return parts.reduce((obj, part) => {
    obj[part] = part;
    return obj;
  }, {});
}

console.log(toObject('first, second, third'));

请注意,我使用 split(/\s*,\s*/) 而不是 split(',') 来消除部分之间的空白。

这可以简化为以下内容 one-liner,如果您喜欢这样的事情:

const toObject = str =>
  str.split(/\s*,\s*/).reduce((o, p) => (o[p] = p, o), {});

console.log(toObject('first, second, third'));