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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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)
  }
答案

Data Structure

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

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

Code

你想要做的是过滤一些involvement包含一个属性为full_name的对象。巧合的是有Array#filterArray#some的功能。

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

search('Claus', data) 

Working Code Example

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)
)

以上是关于使用FP减少对象数组中对象的对象的主要内容,如果未能解决你的问题,请参考以下文章

Scala的面向对象与函数编程

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

我将如何减少这个数组,以便每个对象中的对象被合并 javascript 但不知道键值名称

有没有办法使用相同的布局动态创建片段并向它们显示数据?

怎么将json对象添加进json数组中

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”