Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript从数组中获取购物列表_Javascript_Arrays_Sorting_Object_Javascript Objects - Fatal编程技术网

Javascript从数组中获取购物列表

Javascript从数组中获取购物列表,javascript,arrays,sorting,object,javascript-objects,Javascript,Arrays,Sorting,Object,Javascript Objects,我是javascript新手,所以我甚至很难知道从哪里开始。有人能帮我吗 我有一份配料清单: const Ingris = [ { val: "onion,", amount: "1", }, { val: "paprika", amount: "½ tsp", }, { val: "yogurt", amount: "

我是javascript新手,所以我甚至很难知道从哪里开始。有人能帮我吗

我有一份配料清单:

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"];
var dairy = ["milk", "eggs", "cheese", "yogurt"];
var produce = ["peppers", "radishes", "onions", "tomatoes"];
这就是我想要得到的:

// desired output:

const ShoppingList = [
  {
    produceOutput: [
      {
        val: "garlic, minced",
        amount: "8 cloves ",
      },
    ],
    spicesOutput: [
      {
        val: "paprika",
        amount: "½ tsp  ",
      },
      {
        val: "onion",
        amount: "1",
      },
    ],
    NoCategoryOutput: [
      {
        val: "fine sea salt",
        amount: "½ tsp",
      },
    ],
  },
];
var spices=[“红辣椒”、“欧芹”、“薄荷”、“罂粟籽”、“迷迭香”]; var肉类=[“牛排”、“碎牛肉”、“炖牛肉”、“烤牛肉”、“排骨”]; var dairy=[“牛奶”、“鸡蛋”、“奶酪”、“酸奶”]; var PRODUCT=[“辣椒”、“萝卜”、“洋葱”、“西红柿”]; var成分=[ {“val”:“洋葱,,“金额”:“1”}, {“val”:“paprika”,“金额”:“½tsp”}, {“val”:“酸奶”,“数量”:“1/2杯”}, {“val”:“细海盐”,“量”:“½tsp”} ]; var shoppingList={香料:[],肉类:[],乳制品:[],农产品:[],其他:[]}; 配料。forEach(配料=>{ 如果(香料。包括(配料。val))购物清单。香料。推送(配料); 否则,如果(肉类。包括(配料。val))购物清单。肉类。推送(配料); 如果(dairy.includes(component.val))shoppingList.dairy.push(component); 否则,如果(农产品包括(配料)购物清单。农产品。推送(配料); 其他购物清单。其他。推送(配料); }); 控制台日志(购物清单)您可以使用basic进行此类操作

const categorizedOutput = Ingris.reduce((acc, cur) => {
  if (spices.includes(cur.val)) {
    acc.spices.push(cur);
  } else if (meats.includes(cur.val)) {
    acc.meats.push(cur);
  } else if (dairy.includes(cur.val)) {
    acc.dairy.push(cur);
  } else if (produce.includes(cur.val)) {
    acc.produce.push(cur);
  } else {
    acc.other.push(cur);
  }
  return acc;
}, {
  spices: [],
  meats: [],
  dairy: [],
  produce: [],
  other: []
})

下面是一个稍微参数化的方法。我将不同的食物类别组合成一个对象
cat
,并允许成分的部分匹配(单数匹配复数):

const cat={
香料:[“红辣椒”、“欧芹”、“薄荷”、“罂粟籽”、“迷迭香”、“细海盐”],
肉类:[“牛排”、“碎牛肉”、“炖牛肉”、“烤牛肉”、“排骨”],
乳制品:[“牛奶”、“鸡蛋”、“奶酪”、“酸奶”],
农产品:[“辣椒”、“萝卜”、“洋葱”、“西红柿”];
var成分=[
{“val”:“洋葱”,“金额”:“1”},
{“val”:“paprika”,“金额”:“½tsp”},
{“val”:“酸奶”,“数量”:“1/2杯”},
{“val”:“细海盐”,“量”:“½tsp”}
];
const shop=配料。减少((acc,ing)=>{
Object.entries(cat.some)([ca,pr])=>
pr.find(p=>p.indexOf(ing.val)>-1)和
(acc[ca]=acc[ca]| |[])推
||(acc.other=acc.other | |[])推;
返回acc;
}, {});

控制台.日志(车间)
正如这里的其他人建议使用现代的
reduce
包括
forEach
数组方法。。。为了防止您需要支持较旧的浏览器或更“经典”的实现,您可以使用带有
indexOf
数组方法的简单
for
循环

const Ingris=[{val:“洋葱”,金额:“1”,},
{val:“红辣椒”,金额:“½茶匙”},
{val:“酸奶”,数量:“1/2杯”},
{val:“细海盐”,数量为:½茶匙,},
];
var香料=[“辣椒”、“欧芹”、“薄荷”、“罂粟籽”、“迷迭香”];
var肉类=[“牛排”、“碎牛肉”、“炖牛肉”、“烤牛肉”、“排骨”];
var dairy=[“牛奶”、“鸡蛋”、“奶酪”、“酸奶”];
var PRODUCT=[“辣椒”、“萝卜”、“洋葱”、“西红柿”];
购物清单={
产品产量:[],
香料输出:[],
肉制品出口:[],
奶牛场产量:[],
无类别输出:[],
};
对于(变量i=0;i=0){
购物清单。香料汤。推送(配料);
}如果(肉类指数(配料值)>=0){
购物清单、肉汤、推送(配料);
}如果(乳制品指数(配料值)>=0){
购物清单。奶牛场产量。推送(配料);
}如果(product.indexOf(component.val)>=0,则为else{
购物清单.产品输出.推送(配料);
}否则{
购物清单。无分类。推送(配料);
}
}

log(ShoppingList)
我只是想为自己的个人项目学习JavaScript。如果您愿意帮助我,我将非常感激。在这里,您通常会展示您尝试过并遇到问题的代码,以便我们可以查看、修复或提出替代方案。@如果我知道怎么做,我会这样做。如果我不知道该做什么,我就不能发布我尝试过的任何东西。。。这个问题又被这个问题解决了。。。非常感谢您的回答,但它给出了一个error@DilhanBhagat您只需要添加阵列