簡體   English   中英

Lodash/下划線:將對象數組轉換為單個對象

[英]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 ,我覺得有一個更簡單的答案。 謝謝!

你真的不需要 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 = _.zipObject(
    _.pluck(A, 'key'),
    _.pluck(A, 'val')
);

我會這樣做:

var result = _(A).keyBy('key').mapValues('val').value();

清晰而簡單。

將 @ry 答案更新為較新版本的 lodash:

var result = _.zipObject(
    _.map(A, 'key'),
    _.map(A, 'val')
);

花了一些時間為同樣的問題尋找一個lodash解決方案(並沒有找到任何問題),我想出了這個小幫手功能:

// Array<{}> => {}; ie.: [{ a: 1, }, { b: 2 }] => { a: 1, b: 2 }
export const objectsListToMergedObject = (...objectsList) =>
    Object.assign({}, ...objectsList);

最好的方法是使用 _.extend。

let list = [{"foo":"bar"},{"baz":"faz"},{"label":"Hello, World!"}];
let singleObject = _.extend.apply({}, list);

輸出:

{foo: "bar", baz: "faz", label: "Hello, World!"}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM