如何过滤数组中的其他数组

时间:2019-05-12 10:43:26

标签: javascript

我正在尝试从数组中仅过滤有效产品

var myArr = [
    [{
        product: "Test",
        price: 30, 
        active: true
    },
    {
        product: "Test2",
        price: 50, 
        active: true
    }],
    [{
        product: "Test3",
        price: 60, 
        active: false
    },
    {
        product: "Test4",
        price: 50, 
        active: true
    }]
    ]

过滤有效产品的最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

这是一个嵌套数组,因此您必须根据active == true对其进行两次过滤。

请找到以下解决方案:

var myArr = [
    [{
    product: "Test",
    price: 30, 
    active: true
    },
    {
    product: "Test2",
    price: 50, 
    active: true
    }],
    [{
    product: "Test3",
    price: 60, 
    active: false
    },
    {
    product: "Test4",
    price: 50, 
    active: true
    }]
    ];


    var newArray = [];

        myArr.filter(function (el) {
          el.filter(function(e2)
          {
            if(e2.active)
            {
              newArray.push(e2);
            }
          }); 
        });
    console.log(newArray);

您还可以通过使用foreach来获得结果

var newArray = [];
    myArr.forEach((val,key)=>{
      val.forEach((val1,key1)=>{
        if(val1.active)
        {
          newArray.push(val1);
        }
      });
    });
console.log(newArray);

OR

    var newArray = [];

        var singleArray = [].concat(...myArr);

        singleArray.forEach((val,key)=>{
          if(val.active)
          {
            newArray.push(val);
          }
        });

console.log(newArray);

我希望这会有用。

答案 1 :(得分:2)

首先,我将对数组进行展平,以便每个元素可以处于同一级别,然后对其进行过滤。

它看起来像这样:

var activeProducts = myArr.flat().filter(item => item.active);

此解决方案简短有效,但请注意Array.prototype.flat方法尚未supported on all browsers,但我确定您可以找到一个polyfill。