【问题标题】:Filter array using includes with array values使用包含数组值的过滤器数组
【发布时间】:2021-03-17 01:55:41
【问题描述】:

我正在尝试使用 includes 方法过滤一组对象,但我认为我做错了什么。有人可以帮我吗? 它不需要是包含方法,但它必须返回对象,如下例所示:

<html>
<script>
const testeArray = [{name:"antonio", category: ["One","Two"]},{name:"joana", category: ["Two"]}];
const catArray1 = ["One","Two"];
const catArray2 = ["One"];
const text = "an"

const resultArray1 = testeArray.filter((item)=>{
return item.name.includes(text) && item.category.includes(catArray1);
})  
console.log(resultArray1);  //should return antonio and joana objects

const resultArray2 = testeArray.filter((item)=>{
return item.name.includes(text) && item.category.includes(catArray2);
})  
console.log(resultArray2);   //should return antonio object only 

</script>
</html>

<html>
<script>
const testeArray = [{name:"antonio", category: ["One","Two"]},{name:"joana", category: ["Two"]}];
const catArray1 = ["One","Two"];
const catArray2 = ["One"];
const text = "an"

const resultArray1 = testeArray.filter((item)=>{
return item.name.includes(text) && item.category.includes(catArray1);
})  
console.log(resultArray1);  //should return antonio and joana objects

const resultArray2 = testeArray.filter((item)=>{
return item.name.includes(text) && item.category.includes(catArray2);
})  
console.log(resultArray2);   //should return antonio object only 

</script>
</html>

【问题讨论】:

    标签: javascript arrays filter include


    【解决方案1】:

    您可以使用Array#someArray#includes 来检查一个数组是否包含另一个数组的任何元素。

    const testeArray = [{name:"antonio", category: ["One","Two"]},{name:"joana", category: ["Two"]}];
    const catArray1 = ["One","Two"];
    const catArray2 = ["One"];
    const text = "an"
    
    const resultArray1 = testeArray.filter((item)=>{
    return item.name.includes(text) && item.category.some(x => catArray1.includes(x));
    })  
    console.log(resultArray1);  //should return antonio and joana objects
    
    const resultArray2 = testeArray.filter((item)=>{
    return item.name.includes(text) && item.category.some(x => catArray2.includes(x));
    })  
    console.log(resultArray2);   //should return antonio object only 

    【讨论】:

      【解决方案2】:

      您可以过滤item类别并检查返回的数组长度是否大于0。

      <html>
      <script>
      const testeArray = [{name:"antonio", category: ["One","Two"]},{name:"joana", category: ["Two"]}];
      const catArray1 = ["One","Two"];
      const catArray2 = ["One"];
      const text = "an"
      
      const resultArray1 = testeArray.filter((item)=>{
      return item.name.includes(text) && item.category.filter(cat => catArray1.indexOf(cat) > -1).length > 0;
      })  
      console.log(resultArray1);  //should return antonio and joana objects
      
      const resultArray2 = testeArray.filter((item)=>{
      return item.name.includes(text) && item.category.filter(cat => catArray2.indexOf(cat) > -1).length > 0;
      })  
      console.log(resultArray2);   //should return antonio object only 
      
      </script>
      </html>

      【讨论】:

        【解决方案3】:

        如果您正在寻找完全匹配,您可以使用JSON.stringify 将数组转换为字符串并使用=== 运算符进行匹配。

        const testeArray = [{name:"antonio", category: ["One","Two"]},{name:"joana", category: ["Two"]}];
        const catArray1 = ["One","Two"];
        const catArray2 = ["One"];
        const text = "an"
        
        const resultArray1 = testeArray.filter((item)=>{
            return item.name.includes(text) && JSON.stringify(item.category) === JSON.stringify(catArray1);
        })  
        console.log(resultArray1);  //should return      antonio and joana objects
        
        const resultArray2 = testeArray.filter((item)=>{
            return item.name.includes(text) && JSON.stringify(item.category) === JSON.stringify(catArray2);
        })  
        console.log(resultArray2);
        

        当两个数组的元素位于相同位置时,这将起作用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-30
          • 1970-01-01
          • 2018-09-26
          • 2019-01-20
          • 2020-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多