我正在尝试创建一个接受数组的函数,并在每次一个值等于“ food”时打印“ yummy”。第二个要求是,如果没有数组元素是“食物”,则更新(替换)整个数组,并打印一次“我饿了”。
第二个条件是我遇到困难,不确定如何进行。
我包括了两个测试用例,其中第二个正在尝试触发第二组条件。
function alwaysHungry(array){
// iterate through the array values using a for() loop
for(var i = 0; i < array.length; i++){
// for each element equal to "food", change to yummy
if (array[i] === 'food'){
array[i] = 'yummy';
}
// if no array elements are "food", print "I'm hungry" only once
else if(array[i] !== 'food'){ // this is checking any array index, not simply the first
array[i] = "I\'m hungry";
}
// return array; // returning the array here will short circuit the for loop
}
return array;
}
// Test cases
console.log(alwaysHungry(['food','drink','soda','food','drink']));
// Expected result => ["yummy", "drink", "soda", "yummy", "drink"]
console.log(alwaysHungry(['rocks','air','water']));
// Expected result => ["I'm hungry"]
作为旁注,上面的问题是我在Bootcamp程序中遇到的一个问题的一种变体,我试图在不严重依赖内置方法的情况下理解/解决该问题。
我真正想摆脱的是在不存在值“ food”的情况下,如何在第二个测试用例中置零并进行相应的更新。我已经知道我上面的逻辑(否则)将更新任何不等于“ food”的数组元素,而不是仅更新完全不存在“ food”的数组(测试用例)。
这里有JSBin link供参考,并提前致谢。
答案 0 :(得分:1)
您可以使用标志hungry
,并使用false
初始化此变量。然后检查数组的值并在必要时进行更新,并将标志设置为true
。
最后根据hungry
返回带有["I'm hungry"]
的数组或更新后的数组。
function alwaysHungry(array) {
var hungry = true;
// iterate through the array values using a for() loop
for (var i = 0; i < array.length; i++) {
// for each element equal to "food", change to yummy
if (array[i] === 'food') {
array[i] = 'yummy';
hungry = false;
}
}
return hungry
? ["I'm hungry"]
: array;
}
// Test cases
console.log(alwaysHungry(['food','drink','soda','food','drink']));
// Expected result => ["yummy", "drink", "soda", "yummy", "drink"]
console.log(alwaysHungry(['rocks','air','water']));
// Expected result => ["I'm hungry"]