【发布时间】:2019-06-12 18:39:06
【问题描述】:
只是有点好奇为什么 for 循环中带有 if /else 语句的一段代码可以工作,而另一个用三元运算符简化的代码不起作用。
指令是: 定义一个函数 takeWhile,它接受一个回调函数和一个数组作为参数。 takeWhile 将遍历数组,将每个数组元素作为参数传递给回调。每个从回调返回 true 的顺序数组值都应该收集到一个新数组中。只要数组值从回调中返回 false,takeWhile 就应该返回这个新数组。
这段代码运行良好:
const takeWhile = (cb, arr) => {
// ADD CODE HERE...
//empty array to push true values into
const result = [];
//for loop
for(let i in arr){
//if callback yields true, push to result array.
if(cb(arr[i])){
result.push(arr[i]);
// else return result
} else {
return result;
}
}
//once loop has concluded, return result
return result;
};
/*
* Uncomment the following lines and Run Code to test your work
*/
const isEven = (elem) => (elem % 2 === 0);
console.log(takeWhile(isEven, [2,4,5,6,8])); // -> [2,4]
console.log(takeWhile(isEven, [7, 100, 14])); // -> []
console.log(takeWhile(isEven, [10, 8, 6, 4, 2])); // -> [10, 8, 6, 4, 2]
这段代码使用(我认为)是相同的逻辑,但没有填充结果数组并使用三元运算符正确返回。
const takeWhile = (cb, arr) => {
//empty array to push true values into
const result = [];
//for loop
for(let i = 0; i < arr.length; i++){
//if callback yields true, push to result array, else return result
return cb(arr[i]) ? result.push(arr[i]) : result;
}
return result;
};
/*
* Uncomment the following lines and Run Code to test your work
*/
const isEven = (elem) => (elem % 2 === 0);
console.log(takeWhile(isEven, [2,4,5,6,8])); // -> [2,4]
console.log(takeWhile(isEven, [7, 100, 14])); // -> []
console.log(takeWhile(isEven, [10, 8, 6, 4, 2])); // -> [10, 8, 6, 4, 2]
例如
console.log(takeWhile(isEven, [2,4,5,6,8])); // -> [2,4]
返回 1,什么时候应该返回 [2,4]
【问题讨论】:
-
注意
result.push(arr[i]);分支中没有return。您将无条件返回。
标签: javascript