如何在Javascript中用逗号分隔的值匹配数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Javascript中用逗号分隔的值匹配数组?相关的知识,希望对你有一定的参考价值。

我有两个数组,一个数组用于类别,另一个数组用于产品。产品以逗号分隔的字符串包含多个类别。现在,我想匹配一个特定的类别,然后将匹配的产品添加到类别数组中。

我想将类别与product_category匹配。

这里是数组

产品

[
    {
        "id": 1,
        "product_title": "Product 1",
        "product_size": null,
        "product_author": 5,
        "description": "Test Description",
        "product_category": "Shirts,Pents,Salwar",
        "createdAt": "2020-02-08T11:42:15.000Z",
        "updatedAt": "2020-02-08T11:42:15.000Z"
    },
    {
        "id": 4,
        "product_title": "Product 2",
        "product_size": null,
        "product_author": 5,
        "description": "Test Description",
        "product_category": "Pents,Salwar",
        "createdAt": "2020-02-08T11:42:15.000Z",
        "updatedAt": "2020-02-10T07:08:23.000Z"
    }
]

[类别

[
    {
        "id": 1,
        "category_name": "Shirts",
        "createdAt": "2020-02-08T04:59:59.000Z",
        "updatedAt": "2020-02-10T06:50:05.000Z"
    },
    {
        "id": 9,
        "category_name": "Pents",
        "createdAt": "2020-02-08T04:59:59.000Z",
        "updatedAt": "2020-02-10T06:50:05.000Z"
    }
]

我尝试但无法使用的代码

    this.categories.forEach(cat => {
      this.products.filter(prod => {
        if (prod.product_category.split(',').indexOf(cat.category_name) !== -1) {
          this.categories.push(prod);
        }
      });
    });

请帮助我解决此问题。

任何解决方案表示赞赏!

答案

您不需要filter(),可以将另一个forEach()includes()Object.assign()一起使用:

var products = [
    {
        "id": 1,
        "product_title": "Product 1",
        "product_size": null,
        "product_author": 5,
        "description": "Test Description",
        "product_category": "Shirts,Pents,Salwar",
        "createdAt": "2020-02-08T11:42:15.000Z",
        "updatedAt": "2020-02-08T11:42:15.000Z"
    },
    {
        "id": 4,
        "product_title": "Product 2",
        "product_size": null,
        "product_author": 5,
        "description": "Test Description",
        "product_category": "Pents,Salwar",
        "createdAt": "2020-02-08T11:42:15.000Z",
        "updatedAt": "2020-02-10T07:08:23.000Z"
    }
];
var categories = [
    {
        "id": 1,
        "category_name": "Shirts",
        "createdAt": "2020-02-08T04:59:59.000Z",
        "updatedAt": "2020-02-10T06:50:05.000Z"
    },
    {
        "id": 9,
        "category_name": "Pents",
        "createdAt": "2020-02-08T04:59:59.000Z",
        "updatedAt": "2020-02-10T06:50:05.000Z"
    }
]

categories.forEach((cat,i) => {
  products.forEach(prod => {
    if (prod.product_category.includes(cat.category_name)) {
      Object.assign(categories[i], prod);
    }
  });
});
console.log(categories);
另一答案

其中一种方法是创建一个新数组,在该数组中您可以将映射到特定类别的产品推入:

var products = [
    {
        "id": 1,
        "product_title": "Product 1",
        "product_size": null,
        "product_author": 5,
        "description": "Test Description",
        "product_category": "Shirts,Pents,Salwar",
        "createdAt": "2020-02-08T11:42:15.000Z",
        "updatedAt": "2020-02-08T11:42:15.000Z"
    },
    {
        "id": 4,
        "product_title": "Product 2",
        "product_size": null,
        "product_author": 5,
        "description": "Test Description",
        "product_category": "Pents,Salwar",
        "createdAt": "2020-02-08T11:42:15.000Z",
        "updatedAt": "2020-02-10T07:08:23.000Z"
    }
];

var categories = [
    {
        "id": 1,
        "category_name": "Shirts",
        "createdAt": "2020-02-08T04:59:59.000Z",
        "updatedAt": "2020-02-10T06:50:05.000Z"
    },
    {
        "id": 9,
        "category_name": "Pents",
        "createdAt": "2020-02-08T04:59:59.000Z",
        "updatedAt": "2020-02-10T06:50:05.000Z"
    }
]
var productCategories = [];
categories.forEach((cat)=> {
var productCategory = {};
productCategory.category = cat;
productCategory.products = [];
products.forEach(prod => { 
        if (prod.product_category.indexOf(cat.category_name) !== -1) {
          productCategory.products.push(prod);
        }
      });

productCategories.push(productCategory);
console.log(productCategories);
});
另一答案

尝试一下

categories.forEach(function(c){
c.products=products.filter(function(p){
    var reg=new RegExp(c.category_name,'gi');
    return reg.test(p.product_category)
})

})

您将在每个products中获得category

另一答案

您可以轻松遍历所有类别,然后遍历所有产品。对于每个产品,检查是否存在类别名称,如果存在,则将产品添加到类别产品:

    this.categories.forEach(cat => {
      this.products.forEach(prod => {
        if (prod.product_category.split(',').indexOf(cat.category_name) !== -1) {
          cat.products.push(prod);
        }
      });
    });

[请注意,我将过滤器更改为forEach。

以上是关于如何在Javascript中用逗号分隔的值匹配数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中返回以逗号分隔的值?

匹配 Redshift 中逗号分隔字段中的值

在变量 BASH 的一行中用逗号分隔值

将逗号分隔的值与 MySQL 中的单列值匹配 [重复]

如何在vue js中用逗号分隔的字符串中发布子类别?

R:如何计算列中用逗号分隔的所有字符值?