Lodash/underscore: 将对象数组转换为单个对象
Lodash/underscore: Convert array of objects to single object
我有一个对象数组,如下所示:
var A = [{key:"key1",val:1},{key:"key2",val:2},...,{key:"keyn",val:n}]
我想将 A
转换为一个对象:
{
key1: 1,
key2: 2,
...
keyn: n
}
这个用例从来没有出现过,但我在考虑做 mapKeys
然后 mapValues
,我觉得有一个更简单的答案。谢谢!
可能有我找不到的内置方式,但是:
var result = _.zipObject(
_.pluck(A, 'key'),
_.pluck(A, 'val')
);
你并不真的需要 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}]);
我会这样做:
var result = _(A).keyBy('key').mapValues('val').value();
清晰简单。
最好的方法是使用_.extend。
let list = [{"foo":"bar"},{"baz":"faz"},{"label":"Hello, World!"}];
let singleObject = _.extend.apply({}, list);
输出:
{foo: "bar", baz: "faz", label: "Hello, World!"}
正在将@ry 的回答更新为更新版本的 lodash:
var result = _.zipObject(
_.map(A, 'key'),
_.map(A, 'val')
);
我有一个对象数组,如下所示:
var A = [{key:"key1",val:1},{key:"key2",val:2},...,{key:"keyn",val:n}]
我想将 A
转换为一个对象:
{
key1: 1,
key2: 2,
...
keyn: n
}
这个用例从来没有出现过,但我在考虑做 mapKeys
然后 mapValues
,我觉得有一个更简单的答案。谢谢!
可能有我找不到的内置方式,但是:
var result = _.zipObject(
_.pluck(A, 'key'),
_.pluck(A, 'val')
);
你并不真的需要 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}]);
我会这样做:
var result = _(A).keyBy('key').mapValues('val').value();
清晰简单。
最好的方法是使用_.extend。
let list = [{"foo":"bar"},{"baz":"faz"},{"label":"Hello, World!"}];
let singleObject = _.extend.apply({}, list);
输出:
{foo: "bar", baz: "faz", label: "Hello, World!"}
正在将@ry 的回答更新为更新版本的 lodash:
var result = _.zipObject(
_.map(A, 'key'),
_.map(A, 'val')
);