【问题标题】:Reduce/Filter array of objects into new array of objects. [duplicate]将对象数组减少/过滤为新的对象数组。 [复制]
【发布时间】:2018-02-14 15:37:42
【问题描述】:

假设我有一个对象数组,我需要使用以前的数据创建一个新的对象数组。就我而言,我不需要过滤所有数据。什么是 ES6 的最佳解决方案。

data = [{
 deviceId:1
 deviceStatus:"Offline"
 deviceType:"Tag"
 isConfigured:true
 isEnabled:true
 isLocalized:false
 isMasterAssigned:false
 lastAliveMessage:null
 location:{roomId: 5, name: "Room_207", zones: null, plan: null}
 name:"Tag For sending an alarm"
},{
 deviceId:2
 deviceStatus:"Online"
 deviceType:"Tag"
 isConfigured:true
 isEnabled:true
 isLocalized:false
 isMasterAssigned:false
 lastAliveMessage:null
 location:{roomId: 6, name: "Room_208", zones: null, plan: null}
 name:"Some Text"
}]

我只需要过滤需要的数据。

filteredData=[{
     deviceId:2
     deviceStatus:"Online"
     deviceType:"Tag"
     lastAliveMessage:null
     name: 'name:"Some Text'
     location: location.name
},{
     deviceId:2
     deviceStatus:"Online"
     deviceType:"Tag"
     lastAliveMessage:null
     name: 'name:"Some Text'
     location: location.name
}]

【问题讨论】:

    标签: javascript arrays filter ecmascript-6


    【解决方案1】:

    使用Array#map 函数迭代它们并创建另一种类型的对象。

    const data = [{
        deviceId:1,
        deviceStatus:"Offline",
        deviceType:"Tag",
        isConfigured:true,
        isEnabled:true,
        isLocalized:false,
        isMasterAssigned:false,
        lastAliveMessage:null,
        location:{roomId: 5, name: "Room_207", zones: null, plan: null},
        name:"Tag For sending an alarm"
    },{
        deviceId:2,
        deviceStatus:"Online",
        deviceType:"Tag",
        isConfigured:true,
        isEnabled:true,
        isLocalized:false,
        isMasterAssigned:false,
        lastAliveMessage:null,
        location:{roomId: 6, name: "Room_208", zones: null, plan: null},
        name:"Some Text"
    }];
    
    const newObj = data.map(item => ({
      deviceId: item.deviceId,
      deviceStatus: item.deviceStatus,
      deviceType: item.deviceType,
      lastAliveMessage: item.lastAliveMessage,
      name: item.name,
      location: item.location.name
    }));
    
    console.log(newObj);

    【讨论】:

    • 这个问题应该被标记为重复。
    • 所以投票关闭它而不是评论答案@Alexandru-IonutMihai
    【解决方案2】:

    您可以为想要的密钥创建一个白名单。

    var data = [{ deviceId: 1, deviceStatus: "Offline", deviceType: "Tag", isConfigured: true, isEnabled: true, isLocalized: false, isMasterAssigned: false, lastAliveMessage: null, location: { roomId: 5, name: "Room_207", zones: null, plan: null }, name: "Tag For sending an alarm" }, { deviceId: 2, deviceStatus: "Online", deviceType: "Tag", isConfigured: true, isEnabled: true, isLocalized: false, isMasterAssigned: false, lastAliveMessage: null, location: { roomId: 6, name: "Room_208", zones: null, plan: null }, name: "Some Text" }], 
        keys = ['deviceId', 'deviceStatus'],
        result = data.map(o => Object.assign(...keys.map(k => ({ [k]: o[k] }))));
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 2017-08-17
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 2019-03-26
      相关资源
      最近更新 更多