如图,如果要提取这个这个json数组对象中的这些元素该怎么办呢,下面是我的办法:
假定dataList为这个要提取的数组,首先获取到该数组下的device数组和item数组
var deviceInfos = []; //device数组
var itemLists = []; //item数组
for(var i=0;i<dataLists.length;i++){
deviceInfos.push(dataLists[i].device);
itemLists.push(dataLists[i].item);
}
定义一个封装数组存放我们想要提取的数据,这里我们定义为deviceLists,并循环数组,把需要的元素concat进封装数组
let deviceLists = that.data.deviceList;
for (var k = 0; k < dataLists.length; k++) {
for (var i = 0; i < deviceInfos.length; i++) {
for (var j = 0; j < itemLists.length; j++) {
deviceLists = deviceLists.concat({
deviceId: deviceInfos[i].deviceId,
indoor: deviceInfos[i].indoor,
name: deviceInfos[i].name,
online: deviceInfos[i].online,
picture: deviceInfos[i].picture,
attention: deviceInfos[i].attention,
lookName: itemLists[j].lookName,
unit: itemLists[j].unit,
value: dataLists[k].value,
})
}
}
}
console.log(deviceLists);
但这样得到的数组并不是我们想要的结果,我们可以看到输出的结果:
因为循环过程中会把重复的数据concat进封装数组,这时候我们可以通过数组去重得到我们想要的数据数组
var result = [];
var obj = [];
for(var i=0;i<deviceLists.length;i++){
if(!obj[deviceLists[i].deviceId]){
result.push(deviceLists[i]);
obj[deviceLists[i].deviceId] = true;
}
}
console.log(result);
最后可以得到我们需要数据的封装数组