开发者问题收集

根据过滤器输入获取过滤后的数组

2020-11-30
66

我想基于输入“过滤”和对象:

014918813

我尝试使用MAP函数以:

获得最终结果193901485

,但我得到了“一个对象[null,null,null]

我想获得一个对象,例如:

965953613

仅仅是第一个2,具有ID标签:1

我该怎么做?

3个回答

您可以在主数组上组合 filter() ,然后在标签数组上应用 some()

const transactions =
    [ 
      { _id:1, 
        amount:100, 
        tags:[{id: 1, label: 'A'},
             ]
       },
       { _id:2, 
         amount:200, 
         tags:[{id: 1, label: 'A'},
               { id: 2, label: 'B'}]  
       },
       { _id:3, 
         amount:500, 
         tags:[{ id: 2, label: 'B'}
              ]
       }
 ]

let tag = 1
const res = transactions.filter(obj => obj.tags.some(tag => tag.id === 1));
console.log(res)
Maheer Ali
2020-11-30

您可以将 Array.prototype.some 与您的过滤器结合使用:

const tag = 1;
const transactionsFilter = transactions.filter(transaction => 
    transaction.tags.some(tag => tag.id == tag)
);
Aplet123
2020-11-30

您可以使用 Array.prototype.some 对标签进行测试,并使用 Array.prototype.filter 检查项目是否匹配:

const matchTagId = (tagId, input) =>
  input.filter (({tags}) => tags .some (({id}) => id == tagId))

const input = [{_id: 1, amount:100, tags: [{id: 1, label: 'A'}]}, { _id: 2, amount: 200, tags:[{id: 1, label: 'A'}, {id: 2, label: 'B'}]}]

console .log (matchTagId (1, input))
.as-console-wrapper {max-height: 100% !important; top: 0}
Scott Sauyet
2020-11-30