在两个不同的数组中查找匹配项 - javaScript
finding a match in two different arrays - javaScript
我正在尝试编写一个条件,以找出食谱是否适合素食者。如果不适合素食者,我想控制台记录食谱数组以及一条消息(非素食主义者)。
我尝试了几件事,两个 for 循环,现在我正在尝试使用 forEach 和包含。 问题是我的逻辑有问题,没有打印非素食信息,而且,我打印了 3 次食谱。这是我唯一能想到的,因为我也必须为素食提供一个循环。
我这里有一个垃圾箱。有点乱。
var cookbook = [noodlesWithChicken, bakedPotatoWithBroccoli, hamPineapplePitaPizza, shrimpOliveSalad, chocolateBananaSundae];
var noodlesWithChicken = ["noodles", "chicken", "carrots", "cucumber", "peanut butter", "soy sauce" ];
var bakedPotatoWithBroccoli = ["russet potatos", "broccolli", "butter", "salt", "sour cream"];
var hamPineapplePitaPizza = ["pitas", "mozzarella", "pineaples", "ham"];
var shrimpOliveSalad = ["shrimp", "lettuce", "tomatoes", "artichoke", "black olives", "mayo", "chili sauce"];
var chocolateBananaSundae = ["bananas", "vanilla ice cream", "chocolate sauce", "shredded coconut"];
var vegetarians = ["chicken", "ham", "shrimp"];
var veganItems = ["chicken", "ham", "shrimp", "mozzarella", "sour cream", "mayo", "vanilla ice cream"];
cookbook.forEach(function(item){
for(var i = 0; i < vegetarians.length; i++){
if(cookbook.includes(vegetarians[i])){
console.log(item + " (non-vegetarian)");
} else {
console.log(item);
}
}
});
你的代码看起来很好(不是循环),问题是你在包含它们的数组之后声明了所有的"说明书":
我所做的只是在你开始循环之前将数组向下移动,我也稍微改变了循环......您现在拥有它的方式不太有效:
cookbook.forEach(function(book){
console.log(book);
vegetarians.forEach(function(veg) {
if (book.indexOf(veg) > -1) {
console.log('contains meat');
}
});
});
看看这个新的垃圾箱:http://jsbin.com/bimafo/2/edit?js,console
它不会打印消息,因为您正在执行cookbook.includes(vegetarians[i])
而不是item.includes(vegetarians[i])
。这是您要检查包含非素食选项的item
。
你在forEach
内循环3次,每个非素食选择一次。这就是为什么是每item
输出 3 次。
正如其他人所指出的,您需要在声明其子数组后声明cookbook
数组。
我还想指出,当您可能想调用item.includes
时,您的 for 循环正在调用cookbook.includes
。
此外,您正在为食谱和肉类列表中的项目的每个组合记录结果,而您可能想做的是,如果食谱中有任何肉类,则每个食谱记录一次。您可以使用这样的事情轻松做到这一点:
cookbook.forEach(function(item){
var hasMeat = vegetarians.some(item.includes.bind(item));
console.log(item, hasMeat ? "is not vegetarian" : "is vegetarian");
});
var noodlesWithChicken = ["noodles", "chicken", "carrots", "cucumber", "peanut butter", "soy sauce" ];
var bakedPotatoWithBroccoli = ["russet potatos", "broccolli", "butter", "salt", "sour cream"];
var hamPineapplePitaPizza = ["pitas", "mozzarella", "pineaples", "ham"];
var shrimpOliveSalad = ["shrimp", "lettuce", "tomatoes", "artichoke", "black olives", "mayo", "chili sauce"];
var chocolateBananaSundae = ["bananas", "vanilla ice cream", "chocolate sauce", "shredded coconut"];
var cookbook = [noodlesWithChicken, bakedPotatoWithBroccoli, hamPineapplePitaPizza, shrimpOliveSalad, chocolateBananaSundae];
var vegetarians = ["chicken", "ham", "shrimp"];
var veganItems = ["chicken", "ham", "shrimp", "mozzarella", "sour cream", "mayo", "vanilla ice cream"];
cookbook.forEach(function(item){
var hasMeat = vegetarians.some(item.includes.bind(item));
console.log(item, hasMeat ? "is not vegetarian" : "is vegetarian");
});
相关文章:
- 正在全局范围中查找JavaScript函数
- 如何以编程方式查找javascript语法错误的位置
- 查找javascript对象中元素的位置
- 为什么我的代码不能用于查找 JavaScript 中的数组中是否存在值
- 如何查找 javascript 是否已加载
- 解析此 JSON 响应以查找 Javascript 中的标头
- 如何通过函数调用查找 JavaScript 变量的传递用法
- 有没有办法在IntelliJ中查找JavaScript的方法结构
- 查找 Javascript 函数是否有闭包
- 在页面/元素小部件上查找JavaScript
- 查找Javascript何时暂停(难以总结)
- 正在尝试查找javascript元素's在屏幕上的位置..在webkit浏览器上无法正常工作
- 正在查找Javascript错误
- 在Emacs中查找JavaScript源代码
- 查找 javascript 中所有没有 data- 属性的元素
- 如果第一个位置无法加载,请在第二个位置查找Javascript源文件
- 实现正则表达式查找javascript文件中的类的跨度
- 查找javascript对象数组中缺少的元素
- 快速查找Javascript变量(PollDaddy哈希)
- 查找@
Javascript中的段落