我有以下两个数组:
var headerKeys = ["title","name","address"]
var resultsArr = [
{ title:"test 1", name: "test1", unrelatedKey: "blah" },
{ title:"test 2", name: "test2" }
]
Run Code Online (Sandbox Code Playgroud)
我想清理一下resultsArr
,使其只有在headerKeys
. 我想要的输出如下所示:
[
{ title:"test 1", name: "test1", address: "" },
{ title:"test 2", name: "test2", address: "" }
]
Run Code Online (Sandbox Code Playgroud)
这是我目前使用的代码:
_.chain(resultsArr).map(function(item){
return _.chain(item).pick(headerKeys).value()
}).value()
Run Code Online (Sandbox Code Playgroud)
这输出:
[
{ title:"test 1", name: "test1" },
{ title:"test 2", name: "test2" }
]
Run Code Online (Sandbox Code Playgroud)
它非常接近我想要的,但它不会显示,address
因为它没有设置。无论如何,即使它没有价值,也有强制它显示密钥的方法吗?
另外,如果您有关于如何改进我的 lodash 链的建议,那就太好了。
您可以使用_.defaults()
添加缺少的键:
var headerKeys = ["title","name","address"]
var resultsArr = [
{ title:"test 1", name: "test1", unrelatedKey: "blah" },
{ title:"test 2", name: "test2" }
];
/** create once the defaults object from the headerKeys **/
var defaultsObj = _(headerKeys)
.mapKeys()
.mapValues(function() { return ""; })
.value();
var result = resultsArr.map(function(obj) {
return _(obj)
.pick(headerKeys)
.defaults(defaultsObj) // apply the defaults
.value();
});
console.log(result);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4882 次 |
最近记录: |