双层map将对象数组中的对象转化为数组

首先我们有以下这样一个 objArr 的对象数组和一个包含以上对象的属性的数组 arr


const objArr = [{
  name: 'timfan',
  age: 30,
  sex: 'male',
  website: 'http://spacexcode.com'
}, {
  name: 'Ivy',
  age: 29,
  sex: 'female',
  website: 'http://yugere.com'
}]

const arr = ['name', 'website']

我们的目标是将 objArr 这个对象数组转化为数组 arr 元素属性所对应的值得数组


//输出
[
  [ 'timfan', 'http://spacexcode.com' ],
  [ 'Ivy', 'http://yugere.com' ]
]

这种场景肯定遇到过,正常的做法是使用双层循环遍历键值对,往初始化的数组中插入数组元素


const outArr = []
objArr.forEach(item => {
  const innerArr = []
  arr.forEach(a => {
    innerArr.push(item[a])
  })
  outArr.push(innerArr)
})

而这里有一种巧妙的做法就是使用双层 map 直接将数组 arr 对应的属性替换为它在对象中的值得数组,代码简单逻辑性强,可能不是那么容易懂


const arrArr = objArr.map(item => arr.map(n => item[n]))
console.log(arrArr)

写了那么久的程序,越来越觉得好的代码应该尽量简洁,充分使用语言的高级语法和特性。举一反三,尝试使用不同的方法来实现程序的要求是一个程序员不断提高编码能力的必经之路。

评论

还没有评论...留下你的评论!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Sidebar