取一个数组,用翻转的索引/值做一个对象

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

本文关键字:索引 翻转的 一个对象 数组 一个      更新时间:2023-09-26

lodash 中是否有更直接的方法来实现以下目标,

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

结果

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

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

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 })

然后 Obj 是

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

认为它相对简单,具有良好的可读性。它不完全相同,因为它没有返回值,而是将其保存在 obj 引用中。

既然你说你想使用 lodash

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

这通过将数组转换为键/值对数组来工作,然后您可以使用_.fromPairs将其转换为对象。

我真的不推荐这个,而是使用 ES6 的单行

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

这通过创建一堆小的单属性对象,然后将它们分散到Object.assign的参数列表中,然后将它们粘合到一个对象中。