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

Return a new array that is greater than its 2nd value

提问人:Ayrene 提问时间:12/19/2022 最后编辑:U13-ForwardAyrene 更新时间:12/21/2022 访问量:415

问:

如何返回一个新数组,其值大于其第二个值。如果传递给函数的数组包含少于两个元素,则函数应返回 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
        }
    }
 }
JavaScript 数组 循环返回 for-of-loop

评论

0赞 tucuxi 12/19/2022
请更好地缩进代码,以便结构可读。此外,您有一个名为的变量,它不是数组。这令人困惑。你似乎也忘记了创建一个新的空数组,你可以在其中放置大于 arr[1] 的数字。你花在写好问题上的时间越多,就越容易让人们帮助你!newArr

答:

0赞 Atena Dadkhah 12/19/2022 #1

你可以试试这个:

const greaterThanSecond = arr => {
   if (arr.length > 1){ 
      return arr.filter(e => e > arr[1])
   }
   return false
}
console.log(greaterThanSecond([1,3,5,7]))

在此函数中,首先应检查数组的长度是否不小于 2。然后我们通过检查数组中的每个数字是否大于第二个数字来过滤数组,并将这些数字保留在数组中。

0赞 Ádám Jakab 12/19/2022 #2

您可以尝试单行:

[0, -3, 2, 5].filter((element, index, array) => element > array[1])

filter 函数有 3 个参数:

  1. 被检查的elment
  2. 被检查元素的索引
  3. 原始阵列

筛选器遍历数组,您可以与原始数组的第二个元素进行比较

0赞 HiddenOne1254 12/19/2022 #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]))

试试这个方法

0赞 Sajjad Bayat 12/19/2022 #4

你可以试试这个

function greaterThanSecond(arr) {
    if (arr.length < 2)
        return false;
    return arr.filter((item) => item > arr[1])
}
console.log(greaterThanSecond([0,-3,2,5]))

0赞 Ben 12/21/2022 #5

首先,在我提出另一种方法之前,让我们尝试修复您的代码。

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,这也不是您想要的行为。在您的示例中,您将返回 false,因为 1 < 3,此时您不在函数中。[1,3,5,7]

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