取一个数组并用翻转的索引/值创建一个对象

时间:2016-03-09 09:38:31

标签: javascript lodash

在lodash中是否有更简单的方法来实现以下目标,

var o = _.reduce([2, 3, 7], function(acc, v, i) {
    acc[v] = i || "0";
    return acc;
}, {});

结果,

Object {2: "0", 3: 1, 7: 2}

3 个答案:

答案 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的参数列表中,这将把它们粘合到一个对象中。