我想编写一个函数来获取所有数字,这比所有元素都要大。
例如,如果我有这样的数组:
arr = [ 75,47,42,56,13,55];
我想要一个像这个[75,56,55]
in一个新阵列的结果。
其他例子,如果我有这样的数组:
arr = [16,17,14,3,14,5,2]
我想得到一个结果:[17,14,5,2]
无论数组中有多少数字,我都可以使用哪些方法来获得此结果?
您可以简单地从右侧进行迭代,并检查最新发现的最大值。
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(' ')));
一个简单的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);
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);
试试这个。只需从右侧开始检查。保持最大变量并在发现新的最大值时更新它
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));
一种方法是循环你的数组,获取当前项目并使用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);
我的解决方案:找到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]