在lodash中是否有更简单的方法来实现以下目标,
var o = _.reduce([2, 3, 7], function(acc, v, i) {
acc[v] = i || "0";
return acc;
}, {});
结果,
Object {2: "0", 3: 1, 7: 2}
答案 0 :(得分:4)
尝试使用#content
,其起始值为.reduce()
,
empty object
如果您希望它更短,那么请使用E6版本,
var obj = [2, 3, 7].reduce(function(a,b,i){
return (a[b] = i, a);
}, {});
答案 1 :(得分:2)
纯粹的Javascript解决方案
var obj = {}
[2, 3, 7].forEach(function(val, i) { obj[val] = i })
Obj就是
Object {2: 0, 3: 1, 7: 2}
认为它相对简单且具有良好的可读性。它并不完全相同,因为它没有返回值,而是将它保存在obj引用中。
答案 2 :(得分:1)
既然你说你想用lodash
_.fromPairs(_.map(array, (elt, i) => [elt, String(i)]))
这可以通过将数组转换为键/值对数组来实现,然后您可以使用_.fromPairs
来转换为对象。
我不是真的推荐这个,而是使用ES6的单行:
Object.assign({}, ...array.map((e, i) => ({[e]: String(i)})))
这可以通过创建一堆小的一个属性对象,然后将它们传播到Object.assign
的参数列表中,这将把它们粘合到一个对象中。