如何遍历包含多个对象的列表,并将其属性添加到单独的列表中?

时间:2019-02-01 09:29:22

标签: javascript arrays javascript-objects

我正在用JavaScript创建图形,我需要从JSON输入中提取数据。输入像这样[object1,object2,... *,x_axis_data] 可能存在不确定数量的对象,并且数据可能会有所不同。 每个对象都有一个组属性,因此我可以对其进一步分类。 每个对象始终具有与x_axis_data数组上的条目相对应的键。 例如

DECLARE @FilterDate INT = 1190105

;WITH DateRankingByCustomer AS
(
    SELECT
        T.*,
        DateRanking = ROW_NUMBER() OVER (PARTITION BY T.CUSTOMER ORDER BY T.SEQ DESC)
    FROM
        YourTable AS T
    WHERE
        T.Date < @FilterDate
)
SELECT
    D.*
FROM
    DateRankingByCustomer AS D
WHERE
    D.DateRanking = 1

我设法将x_axis_data与数组的其余部分分开,现在我有2个数组-一个用于x_axis_data,另一个包含对象。

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

预期结果:

    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
    }

3 个答案:

答案 0 :(得分:0)

您需要存储的对象是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);

答案 1 :(得分:0)

您可以使用Object.valuesObject.keysSet做类似的事情。

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.valuesObject.keys don't guarantee the same order。这可能会弄乱图表并显示错误的键值。因此,您可以循环浏览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])

答案 2 :(得分:0)

为了完整起见,在出现错误的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]]); 
}