【问题标题】:Plucking objects from multi-dimensional array从多维数组中提取对象
【发布时间】:2021-02-17 19:43:34
【问题描述】:

假设我们有以下数组:

const admins = [
      {
        adminName: 'admin 1',
        devices: [
          {
            deviceName: 'device 1',
            os: 'desktop',
            appVersion: 1.2.0
          },
          {
            deviceName: 'device 2',
            os: 'desktop',
            appVersion: 1.4.0
          }
        ]
      },
      {
        adminName: 'admin 2',
        devices: [
          {
            deviceName: 'device 1',
            os: 'ios',
            appVersion: 1.4.0
          },
          {
            deviceName: 'device 2',
            os: 'android',
            appVersion: 1.1.0
          }
        ]
      }
    ]

我正在尝试像这样将来自不同管理员的所有设备收集到一个数组中。

const adminDevices = admins.map(admin => admin.devices);

但这会返回一个数组,其中包含另一个包含设备的数组。

我尝试了以下方法:

const adminDevices = admins.map((admin) => {
   return admin.devices.reduce((accumulator, value) => {
     return value;
   }, {});
});

但这正如预期的那样只返回第一个设备值。关于如何使用任何 Array 方法完成此操作而无需声明空数组或设置并手动填写的任何建议?

【问题讨论】:

    标签: javascript arrays javascript-objects


    【解决方案1】:

    使用.flatMap:

    const admins = [
      {
        adminName: 'admin 1',
        devices: [
          { deviceName: 'device 1', os: 'desktop', appVersion: '1.2.0' },
          { deviceName: 'device 2', os: 'desktop', appVersion: '1.4.0' }
        ]
      },
      {
        adminName: 'admin 2',
        devices: [
          { deviceName: 'device 1', os: 'ios', appVersion: '1.4.0' },
          { deviceName: 'device 2', os: 'android', appVersion: '1.1.0' }
        ]
      }
    ];
    
    const adminDevices = admins.flatMap(admin => admin.devices);
    
    console.log(adminDevices)

    【讨论】:

      【解决方案2】:

      如果您要继续平面映射设备列表,我也会尝试将adminName 与每个device 相关联。这样您在取消分组时就不会丢失任何信息。

      const admins = [{
        adminName: 'admin 1',
        devices: [
          { deviceName: 'device 1' , os: 'desktop' , appVersion: '1.2.0' },
          { deviceName: 'device 2' , os: 'desktop' , appVersion: '1.4.0' }
        ]
      }, {
        adminName: 'admin 2',
        devices: [
          { deviceName: 'device 1' , os: 'ios'     , appVersion: '1.4.0' },
          { deviceName: 'device 2' , os: 'android' , appVersion: '1.1.0' }
        ]
      }];
      
      const adminDevices = admins.flatMap(({ adminName, devices }) =>
        devices.map((device) => ({ adminName, ...device })));
      
      adminDevices.forEach(device => console.log(JSON.stringify(device)));
      .as-console-wrapper { top: 0; max-height: 100% !important; }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-29
        • 2020-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多