小程序js提取数组中对象内的元素组成新的数组对象

《小程序js提取数组中对象内的元素组成新的数组对象》

如图,如果要提取这个这个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);

但这样得到的数组并不是我们想要的结果,我们可以看到输出的结果:

《小程序js提取数组中对象内的元素组成新的数组对象》

因为循环过程中会把重复的数据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);

最后可以得到我们需要数据的封装数组

《小程序js提取数组中对象内的元素组成新的数组对象》

    原文作者:Raoml
    原文地址: https://blog.csdn.net/weixin_42106981/article/details/98173273
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞