[英]Javascript/underscore/lodash : Comparing object in array of objects and remove the matched object
[英]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.