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

说明如下:定义一个函数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]

时间:

return cb(arr[i]) ? result.push(arr[i]) : result;

Array.prototype.push返回数组的长度,这里的三元将在第一个循环中返回。

考虑第二个例子的这行。


return cb(arr[i]) ? result.push(arr[i]) : result;



这将在第一个循环中结束函数,而不考虑条件,函数将按条件返回,但是它将在第一个迭代中返回。

三元运算符只能在不包含if-else语句语句的情况下使用,return是代码中的一个语句。


const getEvens = (arr) => arr.filter(x => x % 2 === 0);



这个条件:


if(cb(arr[i])){ 


 result.push(arr[i]);


 // else return result


} else {


 return result;


}



下面的不同:


return cb(arr[i]) ? result.push(arr[i]) : result;



在第一次返回时,只有当三元运算符的操作数是cb(arr[i])运算符时,才能使用三元运算符表达式,而return语句 ,你应该使用if else

...