【问题标题】:How can i get my required data from array of objects using javascript? [closed]如何使用 javascript 从对象数组中获取所需的数据? [关闭]
【发布时间】:2019-04-19 14:59:49
【问题描述】:

我有这样的对象数组

var a = [
 {'time' : 1539664755070,'T-1': 23 },
 {'time' : 1539665095442,'H-1': 24 },
 {'time' : 1539666489560,'T-1': 42 },
 {'time' : 1539665095442,'H-1': 27 },
 {'time': 1539671682230,'H-1': 40.45,'T-2': 33},
 {'time': 1539671682230,'T-2': 30.45,'T-1': 65},
 {'time': 1539671682230,'T-2': 42.45,'H-1': 11},
 {'time': 1539671682230,'T-1': 50.45,'T-2': 85}
];

我想要这样的数据

data : {
  'T-1' : [23,42,50.45],
  'T-2' : [33,30.45,85],
  'H-1' : [24,27,40.45,11]
}

如何从给定的数据中获取这些数据?

【问题讨论】:

  • 您的预期输出在语法上无效。你尝试过什么,它到底有什么问题?
  • @jonrsharpe 预期输出有什么问题?
  • 密钥不是有效的标识符;你的意思是例如'T-1': [...]?
  • 是的,我更新了帖子
  • 键是静态的吗?意思是你每次都期待'T-1', 'T-2', and 'H-1'

标签: javascript angular angular5


【解决方案1】:
const data = a.reduce((acc, row) => {
  // Loop over keys of each row.
  Object.keys(row)
    // Filter out the "time" keys.
    .filter((key) => key !== 'time')
    // Collect the values by key, storing them in the accumulator.
    .forEach((key) => {
      if (typeof acc[key] === 'undefined') {
        acc[key] = []
      }

      acc[key].push(row[key])
    })

  return acc
}, {})

【讨论】:

  • 我建议你添加一些关于你的代码在做什么的信息。
【解决方案2】:

您可以使用array#reduceObject.values() 来创建您的键的哈希并添加与其对应的值。然后使用Object.assign()spread syntax 可以创建最终对象。

let data = [ {'time' : 1539664755070,'T-1': 23 }, {'time' : 1539665095442,'H-1': 24 }, {'time' : 1539666489560,'T-1': 42 }, {'time' : 1539665095442,'H-1': 27 }, {'time': 1539671682230,'H-1': 40.45,'T-2': 33}, {'time': 1539671682230,'T-2': 30.45,'T-1': 65},{'time': 1539671682230,'T-2': 42.45,'H-1': 11}, {'time': 1539671682230,'T-1': 50.45,'T-2': 85} ],
  result = Object.assign({}, ...Object.values(data.reduce((r, o) => {
    let keys = Object.keys(o).filter(k => k !== 'time');
    keys.forEach(key => {
      r[key] = r[key] || {[key] : []};
      r[key][key].push(o[key]);
    });
    return r;
  },{})));
console.log(result);

【讨论】:

    【解决方案3】:

    使用 Map 代替 Key,Value 数组的最佳用例。简化了很多事情。

    【讨论】:

      【解决方案4】:

      这里有一个解决方案,如果有不清楚的地方,请让我知道:

      const result = {};
      
      a.forEach(object => {
          // Loop on each entry in the original array
          Object.entries(object).forEach(([key,value]) => {
            // Loop through each entry of one entry of the original array 
            // (ex 'T-1', 'T-2')
            if(key !== 'time') {
              // It's a key that I'm interested in, so do logic
              if(!result[key]) {
                // If the key (example 'T-1') haven't been encountered yet, 
                // initialize it's entry in the result with an empty array
                result[key] = [];
              }
              result[key].push(value);
            }  
          });
      });
      

      【讨论】:

        猜你喜欢
        • 2021-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-01
        • 2019-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多