使用spread运算符设置keyname

时间:2018-02-21 20:56:56

标签: javascript ecmascript-next

是否可以动态设置密钥名称以扩展运营商?

例如我有:

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

2 个答案:

答案 0 :(得分:4)

您可以将键/值对列表分散到对象分配中:

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

答案 1 :(得分:2)

乔纳斯的解决方案很聪明。我喜欢。这是另一种选择:

dataRow

请注意,我使用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(',')