【问题标题】:return subarray of object based on object key in array根据数组中的对象键返回对象的子数组
【发布时间】:2019-05-03 07:45:52
【问题描述】:

给定这个数据结构:

let assets = [{
  "photos": [{
    "id": 1,
    "label": "bad-syn.jpg",
    "size": 38284
  }]
}, {
  "documents": [{
    "id": 109
  }]
}]

]

如何根据photos 键检索子数组?可以有其他键。

我的函数只返回整个结构:

findAssets: function (key) {
  return this.assets.find((asset) => {
    return asset[key]
  })
}

【问题讨论】:

  • 你不想要地图,而不是找到吗? find 回调的返回值仅用于真实性。
  • 你当前的函数看起来差不多了,你有对象,现在访问值
  • 只是评论一下这个数据结构的设计。带有“photos”键的外部对象是外部数组中唯一的对象吗?
  • “还有很多其他种类的键”。这还不清楚。 assets 中是否只有一个以photos 为键的对象?

标签: javascript arrays object ecmascript-6


【解决方案1】:

如果你想返回 photosarray 或者换句话说只返回给定 key 的值,你只想使用 [key].find() 结果中访问 key 值:

findAssets =  function(key){
  return assets.find((asset) => {
    return asset[key]
  })[key]
}

演示:

let assets = [{
  "photos": [{
    "id": 1,
    "label": "bad-syn.jpg",
    "size": 38284
  }]
}]

findAssets =  function(key){
  return assets.find((asset) => {
    return asset[key]
  })[key]
}

console.log(findAssets("photos"));

注意:

这假定给定的 key 存在于您的 assets 对象中,否则可能会引发错误。

【讨论】:

    【解决方案2】:

    您想使用.map(),因为photos 也是一个数组,所以您需要映射两次。

    let assets = [{
      "photos": [{
        "id": 1,
        "label": "bad-syn.jpg",
        "size": 38284
      }]
    }]
    
    function byKey(k) {
      return assets.map(a => a.photos.map(p => p[k]));
    }
    
    console.log(byKey('label'));

    【讨论】:

      猜你喜欢
      • 2021-09-25
      • 2021-04-09
      • 2017-12-01
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2018-11-23
      • 1970-01-01
      相关资源
      最近更新 更多