如何从数组中获取值,只有那些大于其右边所有元素的值

问题描述 投票:-3回答:7

我想编写一个函数来获取所有数字,这比所有元素都要大。

例如,如果我有这样的数组:

arr = [ 75,47,42,56,13,55];

我想要一个像这个[75,56,55]in一个新阵列的结果。

其他例子,如果我有这样的数组:

arr = [16,17,14,3,14,5,2]

我想得到一个结果:[17,14,5,2]

无论数组中有多少数字,我都可以使用哪些方法来获得此结果?

javascript arrays
7个回答
2
投票

你可以使用filter数组。 splice数组获取右边的所有数字。使用every检查所有数组元素是否大于该值。

let arr = [75, 47, 42, 56, 13, 55];
let result = arr.filter((v, i, a) => [...a].splice(i + 1, a.length).every(o => v > o));

console.log(result);

Doc:filter()splice()every()


1
投票

您可以简单地从右侧进行迭代,并检查最新发现的最大值。

function greaterThanRight(array) {
    return array.reduceRight((r, v) => [].concat(v <= r[0] ? [] : v, r), [])
}

console.log([[75, 47, 42, 56, 13, 55], [16, 17, 14, 3, 14, 5, 2]].map(greaterThanRight).map(a => a.join(' ')));

0
投票

一个简单的for循环,其中内部循环的索引以具有最高权限值的匹配的索引值开始:

var arr = [ 75,47,42,56,13,55];
var res = [];

for(var i=0; i<arr.length; i++){
  var highestValue = arr[i];
  for(var j=i+1; j<arr.length; j++){
    if(highestValue < arr[j]){
      highestValue = arr[j];
      i = j;
      break;
    }
  }
  res.push(highestValue);
}

console.log(res);

0
投票
var arr = [75,47,42,56,13,55];
arr.sort(function(a, b) {
    // a = current item in array
    // b = next item in array
    return b - a;
});
var newArr = arr.slice(0,3);
console.log(newArr);

0
投票

试试这个。只需从右侧开始检查。保持最大变量并在发现新的最大值时更新它

var arr = [ 75,47,42,56,13,55];

function findMaxRight(arr){
var res=[]
var max = Number.MIN_SAFE_INTEGER

for(var i=arr.length -1; i>=0;i--){
   if(arr[i]> max){
     res.unshift(arr[i])
        max = arr[i]
   }
}
return res
}

console.log(findMaxRight(arr));

0
投票

一种方法是循环你的数组,获取当前项目并使用slice获取当前项目之后的数组的其余部分。

然后对数组的其余部分进行降序排序,得到第一个最高的数据。

如果当前值大于最高值,则它大于右侧的所有值:

let items = [75, 47, 42, 56, 13, 55];
let result = [];

items.forEach((item, index) => {
  let head = items[index];
  let tail = items.slice(index + 1).sort(function(a, b) {
    return b - a;
  });
  if ((head > tail[0]) || (index === items.length - 1)) {
    result.push(head);
  }
});
console.log(result);

0
投票

我的解决方案:找到max,如果它是当前的数字存储它,继续使用新的数组looping = looping.slice(1)

let arr = [75,47,42,56,13,55];
let looping = [...arr];
let finish = arr.reduce( (acc, x) => {
  if(x === Math.max(...looping)) acc.push(x);
  looping = looping.slice(1);
  return acc;
}, [])

console.log(finish) // [75,56,55]
© www.soinside.com 2019 - 2024. All rights reserved.