我有一组看起来像这样的对象:
var A = [{key:"key1",val:1},{key:"key2",val:2},...,{key:"keyn",val:n}]
我想将A
转换为对象:
{
key1: 1,
key2: 2,
...
keyn: n
}
这个用例从来没有出现过,但我正在考虑做mapKeys
然后mapValues
,我觉得有一个更简单的答案。谢谢!
答案 0 :(得分:7)
你真的不需要lodash来实现这一目标。只需使用array.reduce()执行此操作即可。请参阅下面的代码示例:
function transformArray(arraySrc){
return arraySrc.reduce(function(prev, curr){
prev[curr.key] = curr.val;
return prev;
}, {});
}
transformArray([{key:"key1",val:1},{key:"key2",val:2},{key:"key3",val:3}]);
答案 1 :(得分:3)
可能有一种我无法找到的内置方式,但是:
var result = _.zipObject(
_.pluck(A, 'key'),
_.pluck(A, 'val')
);
答案 2 :(得分:1)
我这样做:
var result = _(A).keyBy('key').mapValues('val').value();
清晰简单。
答案 3 :(得分:1)
最好的方法是使用_.extend。
let list = [{"foo":"bar"},{"baz":"faz"},{"label":"Hello, World!"}];
let singleObject = _.extend.apply({}, list);
输出:
{foo: "bar", baz: "faz", label: "Hello, World!"}
答案 4 :(得分:1)
将@ry答案更新为lodash的较新版本:
var result = _.zipObject(
_.map(A, 'key'),
_.map(A, 'val')
);
答案 5 :(得分:0)
在花了一些时间寻找同一问题的lodash
解决方案(并没有找到任何问题)之后,我想出了这个小帮手函数:
// Array<{}> => {}; ie.: [{ a: 1, }, { b: 2 }] => { a: 1, b: 2 }
export const objectsListToMergedObject = (...objectsList) =>
Object.assign({}, ...objectsList);