Как мне зациклить список, который состоит из нескольких объектов и добавления их свойств в отдельный список? - PullRequest
0 голосов
/ 01 февраля 2019

Я создаю график в javascript, и мне нужно извлечь мои данные из моего ввода JSON.входные данные поступают следующим образом [object1, object2, ... *, x_axis_data] Может быть неопределенное количество объектов, и данные могут варьироваться.Каждый объект имеет атрибут группы, поэтому я могу классифицировать их дальше.Каждый объект всегда будет иметь ключ, соответствующий записи в массиве x_axis_data.Ex.

x_axis_data = [Mon, Tue, Wed];
obj1 = {"group":"first","Mon":"1","Tue":"15","Wed":"22"};
obj1 = {"group":"second","Mon":"9","Tue":"13","Wed":"21"};

Мне удалось отделить x_axis_data от остальной части массива, и теперь у меня есть 2 массива - один для x_axis_data и один, содержащий объекты.

    for(var z in data){  //loop through all of the object properties
        var val_inner_lst = []; //array of the object data for current object
        group.push(data[z].group); //add the group to a separate array
        for (var i=0; i<interval.length; i++){
            val_inner_lst.push(data[z]+"."+interval[i]); //where my error happens
        }
        values.push(val_inner_lst); //add the individual array to the main array
    }

ожидаемый результат:

group = [first, seconds];
values = [[1,15,22][9,13,21]];
interval = [Mon, Tue, Wed];

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Вы можете сделать что-то подобное, используя Object.values, Object.keys и Set.

data = [{"group":"first","Mon":"1","Tue":"15","Wed":"22"},{"group":"second","Mon":"9","Tue":"13","Wed":"21"}]

groups = [];
values = [];
interval = new Set();

data.forEach(({group, ...days}) => {
  groups.push(group);
  Object.keys(days).forEach(k => interval.add(k))
  values.push(Object.values(days))
})

console.log(groups)
console.log(values)
console.log([...interval])

Вышеуказанное может работать для вас.Но Object.values и Object.keys не гарантируют один и тот же заказ .Это может испортить график и показать неправильное значение для неправильного ключа.Таким образом, вы можете перебирать клавиши interval и получать значения в том же порядке:

data = [{"group":"first","Mon":"1","Tue":"15","Wed":"22"},{"group":"second","Mon":"9","Tue":"13","Wed":"21"}]

groups = [];
values = [];
interval = new Set();

data.forEach(({group, ...days}) => {
  groups.push(group);
  Object.keys(days).forEach(k => interval.add(k))
  values.push([...interval].map(k => days[k]))
})

console.log(groups)
console.log(values)
console.log([...interval])
0 голосов
/ 01 февраля 2019

Для полноты, в этом цикле for, где вы получаете сообщение об ошибке, вы нажимаете строку в val_inner_lst (или пытаетесь сделать и получить сообщение об ошибке).Используя оператор + со строкой в ​​JavaScript, вы попытаетесь преобразовать другую сторону, в вашем случае data[z], которая является объектом, в строку тоже.

Чтобы получить доступ к значению на клавише interval[i] объекта data[z], вам нужно сделать data[z][interval[i]]

for (var i=0; i<interval.length; i++){
  val_inner_lst.push(data[z][interval[i]]); 
}
0 голосов
/ 01 февраля 2019

Вам необходимо сохранить объект array, а затем использовать forEach для достижения желаемого.

let x_axis_data = ['Mon', 'Tue', 'Wed'];
let objArr = [{"group":"first","Mon":"1","Tue":"15","Wed":"22"},
{"group":"second","Mon":"9","Tue":"13","Wed":"21"}];

let groups = []
let values = [];
objArr.forEach(obj =>{
	let arr = []
	x_axis_data.forEach(data=>{
		arr.push(parseInt(obj[data]))
	})
	values.push(arr);
	groups.push(obj.group)
})
console.log(groups);
console.log(values);
...