在reactjs中做地图并过滤数组

时间:2018-03-30 00:01:40

标签: javascript html reactjs filter

我有一个对象列表:

feature-module-routing

下面是我的代码:

scene module

我需要列出包含category ='def'的'a'中的对象。好像我无法过滤它,因为我的'类别'是数组格式。 你们是如何解决它的?

3 个答案:

答案 0 :(得分:0)

只需检查def是否在数组中,如:

a.category.includes('def')

答案 1 :(得分:0)

b
.filter((v,i) => (v.category.includes('def')))
.map((v,i) => (
     <div>{v.number}</div>
))

答案 2 :(得分:0)

您的对象存储为对象数组,这意味着您无法“键入”进行检查。因此,您必须检查数组的所有元素,以查看是否存在密钥category,以及2.查看def是否在包含category的对象中。

Array#includes有一个经常被忽视的哥哥。 Array#some,它接受​​一个可以满足你需要的回调。

然后,您必须再次使用Array#find遍历已过滤的数组,以查找具有键number的对象,然后打印该值。您也可以使用这些对象的索引号手动完成此操作,但它的稳健性要差得多。

a = [[{number:1},{category:['abc', 'cde']},{class:2}],
    [{number:2},{category:['abc', 'def']},{class:3}],
    [{number:3},{category:['def']},{class:4}]]
    
h = a.filter((arr) => {
  return arr.some((obj) => {
    if (obj.category) {
      return obj.category.includes('def')
    } else {
      return false
    }
  })
})
console.log(h)
j = h.map((arr) => {
  let numObject = arr.find((obj) => ('number' in obj));
  if (numObject) {
    return numObject.number
  } else {
    return //something
  }
})
console.log(j)