我正在用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
}
答案 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.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
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]]);
}