JSON Group релевантные данные нескольких массивов - PullRequest
2 голосов
/ 17 апреля 2019

Так что в настоящее время я получаю данные из API, но данные, которые я получаю, очень странные.Например, если я хочу получить температуру, влажность и дату из API для одного определенного местоположения, я получу что-то вроде этого:

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}

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Используйте 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);
1 голос
/ 17 апреля 2019

Вы можете поместить объекты в один массив и использовать цикл 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...