json group多个数组的相关数据

问题描述 投票:2回答:2

所以我目前正在从API获取数据,但我得到的数据非常奇怪。例如,如果我想从API获取1个特定位置的温度,湿度和日期,我会得到这样的结果:

data: {temp="15",humidity=null,date=null,lat=50,long=5}
data: {temp=null,humidity="7",date=null,lat=50,long=5}
data: {temp=null,humidity=null,date="20190417",lat=50,long=5}

因此,似乎API会取出所有单独的内容,但不是将它们全部分组并发送1个数组,而是为我请求的每条信息发送一个数组。是否有可能从每个阵列中取出相关数据,并为每个请求将其置为1?我想用Javascript或JQuery进行分组。我知道通常你必须发布你尝试过的东西,但老实说,目前我完全失去了,只是一个如何解决问题的起点会很好。

预期结果

data: {temp="15",humidity="7",date="20190417",lat=50,long=5}
javascript jquery arrays json object
2个回答
1
投票

您可以将对象放在一个数组中,并通过数组使用reduce循环。使用Object.keys将每个对象转换为数组,并使用forEach循环

let data1 = {temp:"15",humidity:null,date:null,lat:50,long:5}
let data2 = {temp:null,humidity:"7",date:null,lat:50,long:5}
let data3 = {temp:null,humidity:null,date:"20190417",lat:50,long:5}

let result = [data1, data2, data3].reduce((c, v) => {
  Object.keys(v).forEach(o => c[o] = c[o] || v[o]);
  return c;
}, {});

console.log(result);

2
投票

使用Object.entries从对象获取条目,过滤掉null值,从条目重新创建对象(Object.fromEntries),将所有对象合并在一起(Object.assign

const result = data.reduce((target_object, curr) => {
    const entries = Object.entries(curr);
    const filtered_entries = entries.filter(([key, value]) => value !== null);
    const filtered_object = Object.fromEntries(filtered_entries);
    Object.assign(target_object, filtered_object)
}, {});

const data = [{temp: "15", humidity: null, date: null, lat: 50, long: 5}, {temp: null, humidity: "7", date: null, lat: 50, long: 5}, {temp: null, humidity: null, date: "20190417", lat: 50, long: 5}];
const result = data.reduce((prev, curr) => Object.assign(prev, Object.fromEntries(Object.entries(curr).filter(([key, value]) => value !== null))), {});
console.log(result);