香草JavaScript-满足多个条件后尝试更新数组元素

时间:2018-07-17 17:50:40

标签: javascript arrays

我正在尝试创建一个接受数组的函数,并在每次一个值等于“ 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供参考,并提前致谢。

1 个答案:

答案 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"]