如何在不使用对象键名javascript的情况下从json数组对象获取值?
通过Ajax,我将获得动态数据,这些数据不是恒定的,或者基于查询数据的类似数据将发生变化。但是我想显示图表,所以我在需要传递数组数据的地方使用了chartjs。所以我尝试了下面的代码,但只要数据发生变化,代码就会中断 我无法粘贴完整的JSON文件,所以在解析后它看起来像这样如何在不使用对象键名javascript的情况下从json数组对象获取值?,javascript,arrays,json,object,Javascript,Arrays,Json,Object,通过Ajax,我将获得动态数据,这些数据不是恒定的,或者基于查询数据的类似数据将发生变化。但是我想显示图表,所以我在需要传递数组数据的地方使用了chartjs。所以我尝试了下面的代码,但只要数据发生变化,代码就会中断 我无法粘贴完整的JSON文件,所以在解析后它看起来像这样 [{“品牌”:“DUNKIN’DONUTS KEURIG”,“数量:1.9,“价值”:571757},{“品牌”:“MC咖啡馆”,“数量:1.1”,价值:265096}] 您试图做的似乎是根据接收到的数据有条件地填充一个数组
[{“品牌”:“DUNKIN’DONUTS KEURIG”,“数量:1.9,“价值”:571757},{“品牌”:“MC咖啡馆”,“数量:1.1”,价值:265096}] 您试图做的似乎是根据接收到的数据有条件地填充一个数组。一种解决方案可能是使用一个变量,该变量的值基于对象上是否存在
value
或price
属性。例如,在forEach循环中:
const valueOne = [];
jsonData.forEach((e) => {
const val = typeof e.value !== undefined ? e.value : e.average;
valueOne.push(val);
})
您可以使用第一个数组元素的键以及与您要查找的数组对应的值创建对象:
var数据=[{“品牌”:“DUNKIN'DONUTS KEURIG”,“数量”:1.9,“价值”:571757},{“品牌”:“MC咖啡馆”,“数量”:1.1,“价值”:265096}];
var splitArrays=Object.keys(数据[0])。reduce((o,e)=>{
o[e]=data.map(el=>el[e]);
返回o;
}, {});
//显示整个对象
log(splitarray);
//显示各个数组
控制台日志(“品牌”);
log(splitArrays.brand);
控制台日志(“卷”);
log(splitArrays.volume);
//etc
您可以使用Object.keys并指定位置编号以获取该值
var valueOne =[];
var valueTwo = [];
jsonData.forEach(function(e){
valueOne.push(e[Object.keys(e)[1]]);
valueTwo.push(e[Object.keys(e)[2]]);
})
在jsonData.forEach循环中,您可以使用以下方法测试元素的存在性:
if (e['volume']===undefined) {
valueone.push(e.price);
} else {
valueone.push(e.volume);
}
与valuetwo类似…请单击Json数组对象链接查看代码。谢谢请复制粘贴您的代码到问题中请添加实际代码。没有人会为了查看问题而重新键入代码。一旦imgur停止工作,这个问题对于没有任何代码的其他人来说就毫无用处了。var jsondata=[{“品牌”:“DUNKIN'DONUTS KEURIG”,“volume”:1.9,“value”:571757},{“品牌”:“MC CAFE”,“volume”:1.1,“value”:265096};你似乎是。我需要两个数组var valueone=[];var valuetwo=[];在这种情况下,如果我想在一个数组中推送卷,在另一个数组中推送值。在这种情况下,您总是可以简单地更正条件语句。If(e.volume!==未定义)值one.push(e.volume)If(e.value!==未定义)值two.push(e.value)