首页 > 解决方案 > 如何在Javascript中获取作为列表给出的属性子集?

问题描述

我需要带有数组的地图对象数据

const data = [
              {name:"John", age:"22", weight:"60", height:"180cm"},
              {name:"Emma",age:"25",weight:"55",height:"160cm"}
             ]

const key =  ["name", "weight", "height"]

我需要这样的结果

const result = [
                {name:"John", weight:"60", height:"180cm"},
                {name:"Emma", weight:"55",height:"160cm"}
               ]

感谢您的帮助

标签: javascriptarraysobject

解决方案


您可以map覆盖每个对象,并使用Object.fromEntries给定的键创建一个新对象:

const data = [
  { name: "John", age: "22", weight: "60", height: "180cm" },
  { name: "Emma", age: "25", weight: "55", height: "160cm" }
]
const keys = ["name", "weight", "height"]

const res = data.map(o => Object.fromEntries(keys.map(k => [k, o[k]])))
console.log(res)

使用而不是两个循环会更好reduce,尽管可读性较差:

const data = [
  { name: "John", age: "22", weight: "60", height: "180cm" },
  { name: "Emma", age: "25", weight: "55", height: "160cm" }
]
const keys = ["name", "weight", "height"]

const res = data.map(o => keys.reduce((a, k) => (a[k] = o[k], a), {}))
console.log(res)


推荐阅读