使用 FP 减少对象数组中对象中的对象

Reduce for object in object in Array of Objects with FP

我从 API 中得到以下数据:

[
    { names: { name: 'Pete', name;'Claus' } },
    { names: { name: 'Paul', name;'Claus' } },
    { ... }
] 

如何获得一个数组,其中仅包含名称为 Claus 且其中包含 reducefiltermap还有这样的方法?

这样做了 - 但不是函数式风格:

var newMap = []
var map = this.array
for(var i = 0; i < map.length; i++) {
  for(var j = 0; j < map.length; j++) {
    if(map[i] && map[i].involvements[j])
      if(map[i].involvements[j].full_name === 'Claus') {
        newMap.push(map[i])
    }
  }
}
this.array = newMap 

虽然有些位不是很多:

 search(){
    let map = this.submissions
    .map( (x,i) => x.involvements.filter(x => x.full_name === 'Claus'))
    .filter( x => x.length != 0 )
    console.log(map)
  }

数据结构

根据您的代码,您具有以下数据结构:

[
  {
    involvements: [
      { full_name: 'Claus' },
      { full_name: 'Peter Paker' }
    ]
  },
  // more involvements
]

代码

如果 some involvement 包含具有 属性 的对象,您想要做的是 filter full_name。巧合的是函数 Array#filter and Array#some.

const search = (x, xss) =>
    xss.filter(xs => xs['involvements'].some(y => y['full_name'] === x))

search('Claus', data) 

工作代码示例

const data = [{
    involvements: [{
        full_name: 'Claus'
      },
      {
        full_name: 'Peter Parker'
      }
    ]
  },
  {
    involvements: [{
        full_name: 'Clark Kent'
      },
      {
        full_name: 'Kristin Wells'
      }
    ]
  }
]

const search = (x, xss) =>
  xss.filter(xs => xs['involvements'].some(y => y['full_name'] === x))

console.log(
  search('Claus', data)
)