Javascript 如何通过许多不同的类别列表对数据项列表进行分类,其中每个列表包含几个不同的类别值?

Javascript 如何通过许多不同的类别列表对数据项列表进行分类,其中每个列表包含几个不同的类别值?,javascript,arrays,data-structures,comparison,reduce,Javascript,Arrays,Data Structures,Comparison,Reduce,我是JavaScript新手,所以我甚至很难知道从哪里开始。有人能帮我吗。我有我已经尝试过的东西,如下所示,但它与我下面所示的期望输出完全不同 我有一份配料清单,上面有数量和val: const Ingris = [ { val: "onion,", amount: "1", }, { val: "paprika", amount: "½ tsp", }, {

我是JavaScript新手,所以我甚至很难知道从哪里开始。有人能帮我吗。我有我已经尝试过的东西,如下所示,但它与我下面所示的期望输出完全不同

我有一份配料清单,上面有数量和val:

const Ingris = [
  {
    val: "onion,",
    amount: "1",
  },
  {
    val: "paprika",
    amount: "½ tsp",
  },
  {
    val: "yogurt",
    amount: "1/2 Cup",
  },
  {
    val: "fine sea salt",
    amount: "½ tsp  ",
  },
];
我想根据以下变量对它们进行分类:

var spices = ["paprika", "parsley", "peppermint", "poppy seed", "rosemary"];
var meats = ["steak", "ground beef", "stewing beef", "roast beef", "ribs", "chicken"];
var dairy = ["milk", "egg", "cheese", "yogurt"];
var produce = ["peppers", "radishes", "onions", "Tomato"];
这就是我想要得到的:

    // desired output:
    
    const ShoppingList = [
      {
        produceOutput: [
          {
            val: "garlic, minced",
            amount: "8 cloves ",
          },
        ],
        spicesOutput: [
          {
            val: "paprika",
            amount: "½ tsp  ",
          },
          {
            val: "onion",
            amount: "1",
          },
        ],
//The ingredient only goes in here if the value is not in the categories

        NoCategoryOutput: [
          {
            val: "fine sea salt",
            amount: "½ tsp",
          },
        ],
      },
    ];
我已经做了一个正则表达式来检查值,但是它不起作用,而且它不能识别
辣椒粉
辣椒粉
希腊酸奶
酸奶
请有人帮我一下吗

const Categorize = (term) => {
  let data = []
  if (term) {
    const newData = Ingris.filter(({ Ingris }) => {
      if (RegExp(term, "gim").exec(Ingris))
        return ingridients.filter(({ amount }) => RegExp(term, "gim").exec(amount))
          .length;
    });
    data.push(newData)
  } else {
    data = []
  }
};

对于不区分大小写的搜索,您可以将搜索数组更改为带有
i
标志的正则表达式,并将成分
val
转换为两边都带有通配符的正则表达式(如果它们是复数或具有附加信息):

const Ingris=[
{
瓦尔:“洋葱,”,
金额:“1”,
},
{
瓦尔:“红辣椒”,
金额:“½茶匙”,
},
{
瓦尔:“酸奶”,
金额:“1/2杯”,
},
{
瓦尔:“优质海盐”,
金额:“½茶匙”,
},
];
var spices=[/paprika/i、/parsley/i、/peppermint/i、/poppy seed/i、/rosemary/i];
var meats=[/牛排/i、/碎牛肉/i、/炖牛肉/i、/烤牛肉/i、/排骨/i、/鸡肉/i];
var dairy=[/milk/i、/egg/i、/cheese/i、/酸奶/i];
var product=[/pepper/i、/radish/i、/洋葱/i、/番茄/i];
功能购物列表(数组、成分){
对于(var i=0;i分类()
对于不区分大小写的搜索,您可以将搜索数组更改为带有
i
标志的正则表达式,并将成分
val
转换为两边都带有通配符的正则表达式(如果它们是复数或具有附加信息):

const Ingris=[
{
瓦尔:“洋葱,”,
金额:“1”,
},
{
瓦尔:“红辣椒”,
金额:“½茶匙”,
},
{
瓦尔:“酸奶”,
金额:“1/2杯”,
},
{
瓦尔:“优质海盐”,
金额:“½茶匙”,
},
];
var spices=[/paprika/i、/parsley/i、/peppermint/i、/poppy seed/i、/rosemary/i];
var meats=[/牛排/i、/碎牛肉/i、/炖牛肉/i、/烤牛肉/i、/排骨/i、/鸡肉/i];
var dairy=[/milk/i、/egg/i、/cheese/i、/酸奶/i];
var product=[/pepper/i、/radish/i、/洋葱/i、/番茄/i];
功能购物列表(数组、成分){
对于(var i=0;i分类()关于所选方法的详细解释可以在下面提供的示例代码中找到

const ingredientList=[{
“金额”:“1”,
“val”:“包意大利面”
}, {
“val”:“鸡胸肉”
}, {
“val”:“生姜粉”
}, {
“金额”:“8丁香”,
“val”:“大蒜,切碎”
}, {
“金额”:“1”,
“val”:“洋葱”
}, {
“金额”:“½茶匙”,
“val”:“红辣椒”
}, {
“金额”:“1分”,
“val”:“西红柿”
}, {
“金额”:“1/2杯”,
“val”:“酸奶”
}, {
“量”:“1/2茶匙”,
“val”:“重奶油”
}, {
“金额”:“½茶匙”,
“val”:“优质海盐”
}];
const spiceList=[“红辣椒”、“欧芹”、“薄荷”、“罂粟籽”、“迷迭香”];
const meatList=[“牛排”、“碎牛肉”、“炖牛肉”、“烤牛肉”、“排骨”、“鸡胸肉”];
const dairyList=[“牛奶”、“鸡蛋”、“鸡蛋”、“奶酪”、“酸奶”、“奶油”];
const produceList=[“辣椒”、“胡椒”、“萝卜”、“萝卜”、“洋葱”、“洋葱”、“番茄”、“大蒜”、“生姜”];
函数组ItemByCategoryDescriptor和SourceKey(收集器,项){
常数{
描述符列表,
未分类密钥,
itemSourceKey,
指数
}=收集器;
常量isEqualCategoryValues=(
((typeof collector.isEqualCategoryValues==='function')&&collector.isEqualCategoryValues)||
((itemValue,categoryValue)=>{
//这是如何确定相等的默认实现
//如果通过
//“收集器”的“isEqualCategoryValues”属性。
itemValue=itemValue.trim().replace((/\s+/g),“”).toLowerCase();
categoryValue=categoryValue.trim().replace((/\s+/g),“”).toLowerCase();
返回(itemValue==类别值);
})
);
让我们来看看分类列表;
函数doesBoundValueEqualCategoryValue(categoryValue){
返回isEqualCategoryValues(this.value,categoryValue);
}
函数DoesBoundValueMatchCategoryandWichisit(描述符){
const isMatchingValue=descriptor.valueList.some(
doesBoundValueEqualCategoryValue,这个
);
如果(isMatchingValue){/?
const categoryKey=descriptor.targetKey;