如何使用Lodash将数组与字典对象键值合并为指定结构数组?
用Lodash实现数组与对象的合并转换
嘿,我来帮你搞定这个问题!你之前用_.zipObject失败的原因很直接:这个方法需要接收两个数组作为参数,但你传入的projects是一个对象,不是数组,完全匹配不上它的预期用法~
下面给你两种靠谱的Lodash实现方式,都能生成你想要的输出:
方法1:结合_.entries + _.map + _.zipObject
这种方式贴合你一开始想用_.zipObject的思路,先把对象转成键值对数组,再逐个转换:
var keys = ['Name','Id']; var projects = { "project1": "11111", "project2": "22222", "project3": "33333" }; var output = _.map(_.entries(projects), (pair) => { return _.zipObject(keys, pair); });
原理说明:
_.entries(projects)会把你的对象转换成二维键值对数组:[["project1", "11111"], ["project2", "22222"], ["project3", "33333"]]_.map遍历这个二维数组,对每一组["projectX", "XXXX"]执行回调_.zipObject(keys, pair)会把keys数组的元素作为键,pair数组的元素作为值,生成目标对象:{ Name: "project1", Id: "11111" }
方法2:直接在_.map中构造对象
如果觉得上面的步骤有点绕,也可以直接在遍历对象时手动构造目标对象,可读性更强:
var keys = ['Name','Id']; var projects = { "project1": "11111", "project2": "22222", "project3": "33333" }; var output = _.map(projects, (value, key) => ({ [keys[0]]: key, [keys[1]]: value }));
原理说明:
_.map遍历对象时,回调函数的参数顺序是(value, key),所以我们直接把key(比如project1)赋值给keys[0]对应的Name属性,把value(比如11111)赋值给keys[1]对应的Id属性即可。
两种方法最终都会生成你想要的输出:
[ { Name:"project1", Id:"11111"}, { Name:"project2", Id:"22222"}, { Name:"project3", Id:"33333"} ]
内容的提问来源于stack exchange,提问作者24thDan
相关产品推荐
相关产品推荐

