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')
);