簡體   English   中英

使用另一個對象數組過濾Javascript對象數組

[英]Filter Javascript array of objects with another array of objects

我有清單

var list = [
  {name: 'Hello', ads: true, pas: ['Av', 'Sd', 'Qr']},
  {name: 'Fre', ads: false, pas: ['Sd', 'Bc']},
  {name: 'Nat', ads: false, pas: ['Bc', 'Mo', 'Rr']},
  {name: 'Bor', ads: true, pas: ['Bo', 'Be', 'De']},
  {name: 'Arg', ads: true, pas: ['Ar', 'Na', 'Br']},
];

和數組過濾器

var filter = [
 'Sd','Be'
];

我試過filter但它沒有過濾。

list
  .filter(function(ls) {
    return ls.pas
      .filter(function(p){
        return filter.indexOf(p) > -1;
      })
  })

我的預期產量

[
  {name: 'Hello', ads: true, pas: ['Av', 'Sd', 'Qr']},
  {name: 'Fre', ads: false, pas: ['Sd', 'Bc']},
  {name: 'Bor', ads: true, pas: ['Bo', 'Be', 'De']}
];

您可以使用some()來檢查當前對象的pas數組中的任何元素是否在filter數組中。

 var list = [ {name: 'Hello', ads: true, pas: ['Av', 'Sd', 'Qr']}, {name: 'Fre', ads: false, pas: ['Sd', 'Bc']}, {name: 'Nat', ads: false, pas: ['Bc', 'Mo', 'Rr']}, {name: 'Bor', ads: true, pas: ['Bo', 'Be', 'De']}, {name: 'Arg', ads: true, pas: ['Ar', 'Na', 'Br']}, ]; var filter = [ 'Sd','Be' ]; var result = list.filter(function(e) { return e.pas.some(function(a) { return filter.indexOf(a) != -1 }) }) console.log(result); 

使用es6看起來很不錯:

const list = [
   {name: 'Hello', ads: true, pas: ['Av', 'Sd', 'Qr']},
   {name: 'Fre', ads: false, pas: ['Sd', 'Bc']},
   {name: 'Nat', ads: false, pas: ['Bc', 'Mo', 'Rr']},
   {name: 'Bor', ads: true, pas: ['Bo', 'Be', 'De']},
   {name: 'Arg', ads: true, pas: ['Ar', 'Na', 'Br']},
],
filter = ['Sd','Be']

list.filter(a=>a.pas.some(a=>filter.includes(a))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM