Javascript 如何通过许多不同的类别列表对数据项列表进行分类,其中每个列表包含几个不同的类别值?
我是JavaScript新手,所以我甚至很难知道从哪里开始。有人能帮我吗。我有我已经尝试过的东西,如下所示,但它与我下面所示的期望输出完全不同 我有一份配料清单,上面有数量和val: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", }, {
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;