使用 FP 减少对象数组中对象中的对象
Reduce for object in object in Array of Objects with FP
我从 API 中得到以下数据:
[
{ names: { name: 'Pete', name;'Claus' } },
{ names: { name: 'Paul', name;'Claus' } },
{ ... }
]
如何获得一个数组,其中仅包含名称为 Claus
且其中包含 reduce
、filter
、map
还有这样的方法?
这样做了 - 但不是函数式风格:
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)
)
我从 API 中得到以下数据:
[
{ names: { name: 'Pete', name;'Claus' } },
{ names: { name: 'Paul', name;'Claus' } },
{ ... }
]
如何获得一个数组,其中仅包含名称为 Claus
且其中包含 reduce
、filter
、map
还有这样的方法?
这样做了 - 但不是函数式风格:
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)
)