取一个数组并用翻转 indices/values 制作一个对象

Take an array and make an object out of flipped indices/values

在lodash中有没有更直接的方法来实现下面的,

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

结果,

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

尝试使用 .reduce(),起始值为 empty object

var obj = [2, 3, 7].reduce(function(a,b,i){
  return (a[b] = i, a);
}, {});

如果你想让它更短,那就用E6版本,

var obj = [2, 3, 7].reduce((a,b,i) => (a[b] = i, a), {});

一个纯粹的Javascript解决方案是

var obj = {}
[2, 3, 7].forEach(function(val, i) { obj[val] = i })

然后是对象

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

觉得比较简单,可读性好。不完全一样,因为它没有 return 值,而是保存在 obj 引用中。

既然你说你想使用 lodash

_.fromPairs(_.map(array, (elt, i) => [elt, String(i)]))

这通过将数组转换为 key/value 对的数组来实现,然后您可以使用 _.fromPairs 将其转换为对象。

我真的不推荐这个,但是使用 ES6 的单行代码:

Object.assign({}, ...array.map((e, i) => ({[e]: String(i)})))

这通过创建一堆小的 one-属性 对象,然后将它们分布到 Object.assign 的参数列表中来实现,这将为您将它们粘合在一起成为一个对象。