Javascript Lodash使用优化

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

您好,我有一个JSON对象,如下所示:

{
  "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文档,看看引擎如何解析映射,你就会明白我的意思