gpt4 book ai didi

javascript - 关于for循环中三元运算符的问题

转载 作者:行者123 更新时间:2023-12-01 00:56:09 25 4
gpt4 key购买 nike

只是有点好奇为什么 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]

最佳答案

返回 cb(arr[i]) ? result.push(arr[i]) : 结果;

也就是说:如果将当前数组项传递给回调返回一个真值,则在将当前项插入结果数组后返回结果数组的长度,否则返回结果数组。

Array.prototype.push 返回数组的长度。无论哪种方式,这里的三元都会在第一个循环中返回。

关于javascript - 关于for循环中三元运算符的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56568501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com