返回一个大于第二个值的新数组



如何返回一个值大于第二个值的新数组。如果传递给函数的数组少于两个元素,则函数应返回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个参数:

  1. 被检元素
  2. 被检元素索引
  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]))

try this approach

你可以试试这个

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 .此时您已不在工作范围内。

使用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]));

最新更新