【问题标题】:How do you extract a property from a nested object in Typescipt?如何从 Typescript 中的嵌套对象中提取属性?
【发布时间】:2019-09-17 04:23:41
【问题描述】:

我必须从嵌套对象数组中创建一个包含所有“值”属性的数组。

我已经尝试过使用 array.map(),但无法找到适合我的用例的方法,因为对象是动态命名的。

数据示例:

{
    "array": [{
        "BEH": {
            "value": 2,
            "count": 4
        },
        "FHT": {
            "value": 4,
            "count": 1
        }
    }]
}

预期结果: [2,4] 甚至更好: [{BEH: 2, FHT: 4}]

【问题讨论】:

  • 你的数组总是只有一个条目吗?

标签: arrays angular typescript object


【解决方案1】:

这将为您提供所需的两个结果:

const x = {
  "array": [{
    "BEH": {
      "value": 2,
      "count": 4
    },
    "FHT": {
      "value": 4,
      "count": 1
    }
  }]
};

const result1 = x.array.flatMap(v => Object.values(v).map(({value}) => value));
const result2 = x.array.flatMap(v => Object.entries(v)).reduce((a, [key, {value}]) => (a[key] = value, a), {});

console.log(result1);
console.log(result2);

如果您的数组始终只有一个对象,则可以消除很多复杂性。

【讨论】:

    【解决方案2】:

    您可以使用Object.entries() 来执行此操作。我假设你的数组总是只有一个元素。

    var data = { "array": [{ "BEH": { "value": 2, "count": 4 }, "FHT": { "value": 4, "count": 1 } }] }; 
    
    var result = [];
    
    Object.entries(data.array[0]).forEach(([key, value]) => {
      result.push({
        [key]: value.value
      });
    });
    
    console.log(result);

    【讨论】:

      【解决方案3】:

      如果你只有一个嵌套对象那么你可以使用

      var array = [{
          "BEH": {
              "value": 2,
              "count": 4
          },
          "FHT": {
              "value": 4,
              "count": 1
          }
      }]
      
      var map1 = array.map(item => {
          var result = {};
          Object.keys(item).forEach(key => {
              result[key] = item[key].value
          })
          return result;
      });
      
      console.log(map1);
      // expected [{BEH: 2, FHT: 4}]
      

      【讨论】:

        【解决方案4】:

        你可以简单地使用 for 循环来迭代循环和 for in 循环来迭代对象

        var array = [{
                "BEH": {
                    "value": 2,
                    "count": 4
                },
                "FHT": {
                    "value": 4,
                    "count": 1
                }
         }];
        
            var result = [];
            for(let i = 0; i < array.length; i++) {
                let item = array[i];
                let obj = {};
                for(let j in item) {
                    if(item.hasOwnProperty(j)) {
                        obj[j] = item[j]['value'];
                    }
                }
                result.push(obj);
            }
        
            console.log(result);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-29
          • 1970-01-01
          • 2018-02-06
          • 2013-10-11
          • 2021-09-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多