Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我在函数中缺少了什么(返回一个大于右边元素的元素数组)?_Javascript_Arrays - Fatal编程技术网

Javascript 我在函数中缺少了什么(返回一个大于右边元素的元素数组)?

Javascript 我在函数中缺少了什么(返回一个大于右边元素的元素数组)?,javascript,arrays,Javascript,Arrays,我需要创建一个函数来查找给定数组中的所有元素,这样每个元素都大于它右边的所有元素 例子 leader([2, 3, 20, 15, 8, 3]) ➞ [20, 15, 8, 3] leader([2, 3, 20, 15, 8, 25, 3]) ➞ [25, 3] 以下是我的功能: 功能负责人(数组){ 返回array.slice(array.indexOf(Math.max(…array))) } log(leader([8,7,1,2,10,3,5])仅仅查找max元素的索引是不够的,因

我需要创建一个函数来查找给定数组中的所有元素,这样每个元素都大于它右边的所有元素

例子

leader([2, 3, 20, 15, 8, 3]) ➞ [20, 15, 8, 3]

leader([2, 3, 20, 15, 8, 25, 3]) ➞ [25, 3]
以下是我的功能:
功能负责人(数组){
返回array.slice(array.indexOf(Math.max(…array)))
}

log(leader([8,7,1,2,10,3,5])
仅仅查找max元素的索引是不够的,因为max元素后面的元素可能不是按降序排列的。改用
.filter

功能负责人(数组){
返回数组.filter(
(num,i)=>array.slice(i+1)。每(
otherNum=>num>otherNum
)
);
}

log(leader([8,7,1,2,10,3,5])
您可以从右侧减少

这种方法只需要一个循环

功能负责人(数组){
返回数组.reduceRight((r,v)=>{
如果(!r.length | | v>r[0])r.unshift(v);
返回r;
}, []);
}

console.log(leader([8,7,1,2,10,3,5]))
可能是reduce,但我在向reduce函数添加初始值时遇到问题,即使我调用了array.reduce(function,[]),它会将索引[0]作为初始值返回给我。。有人知道为什么吗?再看一遍描述。结果并不是“一切都在最大元素的右边”。您还需要确保没有元素[…,a,b,…]其中b小于或等于a。我知道我只是被锁定了,因为我无法找到如何过滤结果。然后看看您需要解决的新问题:忽略您已经编写的所有内容,因为这无关紧要。只需关注“如果您有一个元素数组,如何删除不小于前一个元素的元素”,通过这种方式重新表述,它几乎写下了自己:您将一个元素与前一个元素进行比较,然后要么扔掉它,要么保留它。谢谢您,这对我帮助很大!这个arrow函数肯定需要一些参数或语句括号,所以它一开始就不那么容易混淆,因为
(otherNum)=>(num>otherNum)
可以获得最大的易读性=)我不明白它是如何过滤数组的。。它从第二个值开始,只渲染大于前一个值的值?如果你能解释一下,谢谢you@YoëlZerbib
array.slice(i+1)
构造一个子数组,包含所考虑元素右侧的所有元素。然后,
.every
检查该子数组中的每个元素是否小于所考虑的元素,如果索引是最后一个元素,则无需添加条件?因为当它检查5时,它的索引是+1?谢谢你抽出时间again@YoëlZerbib对于最后一个元素,
.slice
数组将是空的:
[]
。对空数组调用的每个
都会给出
true
,因此不需要额外的代码。