首页 > 解决方案 > 使用javascript根据条件将数组拆分为两个

问题描述

我有一个像下面这样的对象数组。

[
    {
        product_id: 4,
        product_name: "Samsung",
        category_name: "Tv and home appliance",
        is_Available: 1
    },
    {
        product_id: 8,
        product_name: "Apple",
        category_name: "Home gadgets",
        is_Available: 1
    },
    {
        product_id: 9,
        product_name: "Verifone",
        category_name: "Electronics",
        is_Available: 0
    }
  ]

我想根据is_Available标志值将此数组拆分为两个。所以我确实喜欢使用reduce。

const formmattedResponse = data.reduce((arr,el) => {
            if(el.is_Available === 1) {
                arr.push({...el});
            }
            return arr;
        },[]);

但是,我需要基于上述数据数组的这种类型的格式化数据,如下所示

{
    availableData: [{
        product_id: 4,
        product_name: "Samsung",
        category_name: "Tv and home appliance",
        is_Available: 1
    },
    {
        product_id: 8,
        product_name: "Apple",
        category_name: "Home gadgets",
        is_Available: 1
    }
   ],
  notAvailableData: [{
        product_id: 9,
        product_name: "Verifone",
        category_name: "Electronics",
        is_Available: 0
    }
   ]
  }

标签: javascriptarrays

解决方案


您可以使用一个数组并根据它们的可用性通过单个循环推送对象。

const
    data = [{ product_id: 4, product_name: "Samsung", category_name: "Tv and home appliance", is_Available: 1 }, { product_id: 8, product_name: "Apple", category_name: "Home gadgets", is_Available: 1 }, { product_id: 9, product_name: "Verifone", category_name: "Electronics", is_Available: 0 }],
    result = data.reduce((r, o) => {
        r[o.is_Available ? 'availableData' : 'notAvailableData'].push(o);
        return r;
    }, { availableData: [], notAvailableData: [] });

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读