繁体   English   中英

基于另一个数组过滤对象数组返回新数组javascript

[英]filtering an array of objects based on another array returning new array javascript

我有一个对象数组,我们可以调用 arrayOne 并希望使用 arrayTwo 检查它是否包含与 ArrayOne 匹配的任何字符串,它将返回具有匹配数组的新数组。 我可以使用 ES6 做的最好的方法是什么?

例子 :

ArrayOne =    [  
       {  
          "sessionId":1,
          "name":"session name 1",
          "types":[  
             "type1",
             "type 2"
          ],
          "tracks":[  
             "track1",
             "track 2"
          ]
       },
       {  
          "sessionId":2,
          "name":"session name 2",
          "types":[  
             "track 3",
             "type 2"
          ],
          "tracks":[  
             "track 3",
             "track 2"
          ]
       }
    ]


arrayTwo = ["track 3"] // or it can be ["track&3", "Type 2"] which it will return both array

返回

newArray =  [ {  
      "sessionId":2,
      "name":"session name 2",
      "types":[  
         "track 3",
         "type 2"
      ],
      "tracks":[  
         "track 3",
         "track 2"
      ]
   }]

我尝试了以下方法:

arrayOne.filter((obj) => {
                Object.keys(obj).forEach((key) => {
                    if (obj[key].toString().indexOf(arrayTwo) !== -1) {
                        this.setState({
                            newArray: [obj]
                        })
                    }
                });
            });

如果你只关心轨道数组,你可以做这样的事情:

ArrayOne.filter((obj) => arrayTwo.some(x => obj.tracks.includes(x)));

如果 arrayTwo 包含某个元素 x 使得 obj.tracks 具有匹配元素,则 .some() 返回 true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM