Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript从对象数组中获取所需数据?_Javascript_Angular_Angular5 - Fatal编程技术网

如何使用javascript从对象数组中获取所需数据?

如何使用javascript从对象数组中获取所需数据?,javascript,angular,angular5,Javascript,Angular,Angular5,我有一组像这样的对象 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

我有一组像这样的对象

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]
}
我想要这样的数据

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]
}

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

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

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
}, {})
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);
      }  
    });
});
您可以将arrayreduce与Object.values一起使用,以创建密钥的哈希并添加与之对应的值。然后使用Object.assign和spread语法可以创建最终对象

“时间”:153966559595442,,“T-1”:40.45,'T-2’:截至截至目前,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“T-2”:85} ], 结果=Object.assign{},…Object.valuesdata.reducer,o=>{ 让keys=Object.keyso.filterk=>k!='time'; keys.forEachkey=>{ r[key]=r[key]|{[key]:[]}; r[key][key].pusho[key]; }; 返回r; },{};
console.logresult 使用而不是键、值数组的最佳用例。简化了很多事情。

您的预期输出在语法上无效。您尝试了什么,它到底有什么问题?@jornsharpe预期输出中有什么问题?这些键不是有效的标识符;你是说例如“T-1”:[…]吗?是的,我更新了邮递。钥匙是静态的吗?也就是说,您每次都希望看到“T-1”、“T-2”和“H-1”?我建议您添加一些有关代码正在执行的操作的信息。