【问题标题】:filtering an array of objects based on another array returning new array javascript基于返回新数组javascript的另一个数组过滤对象数组
【发布时间】:2019-11-02 14:33:04
【问题描述】:

我有一个对象数组,我们可以调用它 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]
                        })
                    }
                });
            });

【问题讨论】:

    标签: javascript arrays node.js reactjs es6-promise


    【解决方案1】:

    如果你只关心 track 数组,你可以这样做:

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

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

    【讨论】:

    • 是的,同意这仅适用于轨道,但元素可以在任何 obj 中,而不仅仅是轨道。谢谢@erik
    • 在这种情况下,您可能需要研究递归解决方案。递归是我所知道的唯一方法来彻底检查对象的每个元素,以及其中所有深度嵌套的对象和数组。但是,如果您要检查的每个对象始终具有相同的结构,则只需执行多个检查即可获得更好的性能,即 (obj.tracks.includes(x) || obj.types.includes(x))
    • 我最终这样做了,性能更好谢谢@erik。
    猜你喜欢
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 2020-12-13
    相关资源
    最近更新 更多