使用扩展运算符设置键名
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'));
是否可以将键名动态设置为传播运算符?
例如我有:
'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'));