取一个数组并用翻转 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
的参数列表中来实现,这将为您将它们粘合在一起成为一个对象。
在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
的参数列表中来实现,这将为您将它们粘合在一起成为一个对象。