如何返回一个新数组,其值大于其第二个值。如果传递给函数的数组少于两个元素,函数应返回 false。
例如,
greaterThanSecond([1,3,5,7])
应返回 [5, 7]。
greaterThanSecond([0, -3, 2, 5])
应返回 [0, 2, 5]。
greaterThanSecond([2])
应该返回 false。
这是我尝试过的。
function valGreaterThanSecond(arr) {
for (let newArr of arr) {
if (newArr > arr[1]) {
return [newArr]
}else {
return false
}
}
}
你可以尝试一下单行:
[0, -3, 2, 5].filter((element, index, array) => element > array[1])
过滤函数有3个参数:
过滤器迭代数组,您可以与原始数组的第二个元素进行比较
function valGreaterThanSecond(arr) {
let resultArray = []
console.log(arr.length)
let checkValue = arr[1]
if(arr.length < 2)
return false
else
{
for(let i = 0 ; i < arr.length ; i++){
if(arr[i]!=checkValue && arr[i]>checkValue)
resultArray.push(arr[i])
}
return resultArray
}
}
console.log(valGreaterThanSecond([2]))
尝试这个方法
你可以试试这个
function greaterThanSecond(arr) {
if (arr.length < 2)
return false;
return arr.filter((item) => item > arr[1])
}
console.log(greaterThanSecond([0,-3,2,5]))
你可以试试这个:
const greaterThanSecond = arr => {
if (arr.length > 1){
return arr.filter(e => e > arr[1])
}
return false
}
console.log(greaterThanSecond([1,3,5,7]))
在这个函数中,首先你应该检查数组的长度是否不小于2。然后我们通过检查数组中的每个数字是否大于第二个数字来过滤数组,并将这些数字保留在数组中。
在我建议另一种方法之前,首先让我们尝试修复您的代码。
function valGreaterThanSecond(arr) {
let newArr = [];
if (arr.length < 2) return false;
for (let elem of arr) {
if (elem > arr[1]) {
newArr = [...newArr, elem]
}
}
return newArr;
};
console.log(valGreaterThanSecond([1,3,5,7]));
你的函数的问题是,一旦你发现一个数字大于第二个元素,你就立即返回它,从而退出函数并返回数组中的这个元素,这不是你想要的。如果您在数组中发现一个不大于第二个元素的元素,您将立即返回 false,这也不是您想要的行为。在您的
[1,3,5,7]
示例中,您将返回 false,因为 1 < 3 and you are out of the function at this point.
使用不同的方法
reduce
我想建议一种不同的方法,因为有一些答案使用
filter
,这是我首先想到的自己。
这是使用数组
reduce
函数的解决方案。
const greaterThanSecond = (arr) => {
if (arr.length < 2) return false;
const result = arr.reduce((acc, curr) => {
if (curr > arr[1]) return [...acc, curr];
return acc;
}, []);
return result;
}
console.log(greaterThanSecond([1,3,5,7]));