JavaScript:将数组转换为对象的最佳方式是什么?

12

什么是最好的转换方法:

a = ['USD', 'EUR', 'INR']

a = {'USD': 0, 'EUR': 0, 'INR': 0};

将数组元素作为对象的键,初始值为0。


2
定义“最佳”。最短的代码?最佳性能?最少挑剔的机会? - deceze
这些信息不足以支持问题解决。为什么不能手动处理?这是流程化的数据吗?在对象中是否有一致的值要分配给每个变量?等等。 - Liam MacDonald
https://dev59.com/l2855IYBdhLWcg3wp2N0 - Nitin Dhomse
我认为这个答案这个答案对你来说是正确的。 - Pine Code
@deceze 寻求短代码和高性能,但主要重点是使用最佳操作函数(针对此条件)。 - Shishir Sonekar
3个回答

24
使用 Array#reduce 方法将其缩减为单个对象。

a = ['USD', 'EUR', 'INR'];

console.log(
  a.reduce(function(obj, v) {
    obj[v] = 0;
    return obj;
  }, {})
)


甚至一个简单的for循环都可以。

var a = ['USD', 'EUR', 'INR'];
var res = {};

for (var i = 0; i < a.length; i++)
  res[a[i]] = 0;

console.log(res);


17

您可以使用Object.assignArray#map扩展语法...一起使用。

var array = ['USD', 'EUR', 'INR'],
    object = Object.assign(...array.map(k => ({ [k]: 0 })));

console.log(object);


3
我认为这里缺少一个对象作为第一个参数?Object.assign({}, ...a.map(k => ({ [k]: 0 }))) - limitlessloop

5
你可以使用 Array.mapObject.assign

var a = ['USD', 'EUR', 'INR']
var result = Object.assign.apply(null, a.map(x =>({[x]:0})));
console.log(result)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接