Javascript Lodash使用优化
您好,我有一个JSON对象,如下所示:Javascript Lodash使用优化,javascript,refactoring,lodash,Javascript,Refactoring,Lodash,您好,我有一个JSON对象,如下所示: { "serviceItemPriceList": [ { "commissionalPrice": 2, "currencyType": { "type": "EUR", "languageKey": "enum.currency_type.EUR" }, "id": 10, "officialPrice": 2, "vat": 5
{
"serviceItemPriceList": [
{
"commissionalPrice": 2,
"currencyType": {
"type": "EUR",
"languageKey": "enum.currency_type.EUR"
},
"id": 10,
"officialPrice": 2,
"vat": 5
},
{
"commissionalPrice": 1,
"currencyType": {
"type": "TRY",
"languageKey": "enum.currency_type.TRY"
},
"id": 9,
"officialPrice": 1,
"vat": 10
}
]
}
[
{
"id": 10,
"currencyType": {
"type": "EUR",
"languageKey": "enum.currency_type.EUR"
}
},
{
"id": 9,
"currencyType": {
"type": "TRY",
"languageKey": "enum.currency_type.TRY"
}
}
]
我们把它称为obj。。。我想得到如下输出:
{
"serviceItemPriceList": [
{
"commissionalPrice": 2,
"currencyType": {
"type": "EUR",
"languageKey": "enum.currency_type.EUR"
},
"id": 10,
"officialPrice": 2,
"vat": 5
},
{
"commissionalPrice": 1,
"currencyType": {
"type": "TRY",
"languageKey": "enum.currency_type.TRY"
},
"id": 9,
"officialPrice": 1,
"vat": 10
}
]
}
[
{
"id": 10,
"currencyType": {
"type": "EUR",
"languageKey": "enum.currency_type.EUR"
}
},
{
"id": 9,
"currencyType": {
"type": "TRY",
"languageKey": "enum.currency_type.TRY"
}
}
]
我有一个工作代码来实现这一点:
lodash(obj.serviceItemPriceList).map(
function (serviceItemPrice) {
return lodash(serviceItemPrice).pick(['id', 'currencyType']).value();
}
).value();
我的问题是:有没有更好/更短/更聪明的方法
提前谢谢 您可以拥有需要作为结果一部分的键数组,并使用
.map
+.reduce
返回新对象
注意:使用数组的目的是减少硬编码
var obj={serviceItemPriceList:[{CommissionPrice:2,currencyType:{type:“EUR”,languageKey:“enum.currency_type.EUR”},id:10,officialPrice:2,vat:5},{CommissionPrice:1,currencyType:{type:“TRY”,languageKey:“enum.currency_type.TRY”},id:9,officialPrice:1,vat:10};
var returnKeyList=[“currencyType”,“id”]
var r=obj.serviceItemPriceList.map(函数(o){
returnKeyList.reduce(函数(p,c){
p[c]=o[c];
返回p;
}, {})
});
console.log(r)
使用Array.prototype.map()
函数缩短“纯”JavaScript解决方案:
var obj={“serviceItemPriceList”:[{“CommissionPrice”:2,“currencyType”:{“type”:“EUR”,“languageKey”:“enum.currency_type.EUR”},“id”:10,“officialPrice”:2,“at”:5},{“CommissionPrice”:1,“currencyType”:{“type”:“TRY”,“languageKey”:“enum.currency_type.TRY”},“id”:9,“officialPrice”:1,“at”:10};
var result=obj.serviceItemPriceList.map(函数(o){
返回{id:o.id,currencyType:o.currencyType};
});
控制台日志(结果)
您的解决方案已经足够短了,我只建议删除不必要的.value
调用,因为您没有使用链接
_.map(obj.serviceItemPriceList, item => _.pick(item, ['id', 'currencyType']));
如果您愿意的话,有一种没有lodash库的简短的“纯”Javascript方法assume@ZeRubeus仅供参考,MDN只是一个教程网站
.map
是JS数组函数的一部分。不确定优化thing@ZeRubeus“纯”JavaScript意味着核心JavaScript,它将比任何库都快,节省带宽并真正获得快速响应??我知道纯js意味着core js,但我不相信它会因为是core js而更快。转到v8文档,看看引擎如何解析映射,你就会明白我的意思