Javascript从数组中获取购物列表
我是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: "
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您只需要添加阵列