【问题标题】:How to create subset of object, rename some keys and then restructure it?如何创建对象的子集,重命名一些键然后重组它?
【发布时间】:2019-08-12 14:17:00
【问题描述】:

我想获取一个现有对象并创建一个仅包含我需要的键/值对的新对象,重命名一些键并以特定格式重组。

原始对象

{
  "id": "123",
  "start": "2016-02-29",
  "end": "2099-12-31",
  "code": "10000",
  "type": "Filtered",
  "dvalue": "287.96",
  "benchmark": "131"
}
...etc.

新对象

{
  "id": "123",
  "data": {
    "x": "287.96",
    "y": "131"
  }
}
...etc.

我探索了 lodash,最后创建了一个子集,然后重命名了键,但我需要帮助将 xy 嵌套到一个名为 data 的新键中。

我的代码:

var newItems = _.map(items, _.partialRight(_.pick, ['id', 'dvalue', 'benchmark']));

Object.keys(newItems).forEach(function (key) {
    newItems[key].x = newItems[key].dvalue;
    newItems[key].y = newItems[key].benchmark;
    delete newItems[key].dvalue;
    delete newItems[key].benchmark;
});

返回:

{
  "id": "123",
  "x": "287.96",
  "y": "131"
}
...etc.

【问题讨论】:

    标签: javascript object lodash


    【解决方案1】:

    对于您的用例,我不确定您是否真的需要 lodash 之类的东西。你应该可以使用内置的Array.prototype.map 来做到这一点。

    另外destructuring可以让代码更干净:

    const newItems = items.map(({id, dvalue, benchmark}) => ({
      id,
      x: dValue,
      y: benchmark  
    }));
    

    【讨论】:

      【解决方案2】:

      您可以直接获取该属性并重命名其他嵌套属性。

      var data = [{ id: "123", start: "2016-02-29", end: "2099-12-31", code: "10000", type: "Filtered", dvalue: "287.96", benchmark: "131" }],
          result = data.map(({ id, dvalue: x, benchmark: y }) => ({ id, data: { x, y } }));
      
      console.log(result);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-02
        • 1970-01-01
        • 2020-11-26
        • 2018-05-17
        • 2021-05-20
        • 2021-01-06
        • 2020-10-14
        • 2015-07-07
        相关资源
        最近更新 更多