通过Ajax,我将获得不是恒定的动态数据,或者基于查询数据的类似数据将发生变化。但是我想显示图表,所以我在需要传递数组数据的地方使用了chartjs。因此,我尝试使用下面的代码,但是只要数据更改,该代码就会中断。
我无法粘贴完整的JSON文件,因此在解析后看起来像这样 [{“ brand”:“ DUNKIN'DONUTS KEURIG”,“ volume”:1.9,“ value”:571757},{“ brand”:“ MC CAFE”,“ volume”:1.1,“ value”:265096}];
答案 0 :(得分:1)
似乎您要执行的操作是根据要接收的数据有条件地填充一个数组。一种解决方案可能是让您使用变量的值,该变量的值取决于对象上是否存在value
或price
属性。例如,在您的forEach循环中:
const valueOne = [];
jsonData.forEach((e) => {
const val = typeof e.value !== undefined ? e.value : e.average;
valueOne.push(val);
})
答案 1 :(得分:1)
您可以使用Object.keys并指定位置编号以获取该值
var valueOne =[];
var valueTwo = [];
jsonData.forEach(function(e){
valueOne.push(e[Object.keys(e)[1]]);
valueTwo.push(e[Object.keys(e)[2]]);
})
答案 2 :(得分:1)
在jsonData.forEach循环中,您可以通过使用类似以下内容来测试元素的存在:
if (e['volume']===undefined) {
valueone.push(e.price);
} else {
valueone.push(e.volume);
}
与valuetwo相似...
答案 3 :(得分:0)
您可以使用第一个数组元素的键以及对应于所要访问的数组的值创建一个对象:
var data = [{"brand":"DUNKIN' DONUTS KEURIG","volume":1.9,"value":571757},{"brand":"MC CAFE","volume":1.1,"value":265096}];
var splitArrays = Object.keys(data[0]).reduce((o, e) => {
o[e] = data.map(el => el[e]);
return o;
}, {});
// show the whole object
console.log(splitArrays);
// show the individual arrays
console.log("brand");
console.log(splitArrays.brand);
console.log("volume");
console.log(splitArrays.volume);
// etc