在JavaScript中查找数组中次高元素中的最低元素
这个问题似乎有点奇怪。没关系。 这是一个数组在JavaScript中查找数组中次高元素中的最低元素,javascript,arrays,sorting,Javascript,Arrays,Sorting,这个问题似乎有点奇怪。没关系。 这是一个数组 [2, 7, 5, 10] 如果我想得到2之后的下一个更大的数字,这是我的代码 var MyArray = [2, 7, 5, 10]; var RandomNumber = 2; var MinGreaterThanPos; for (var i =0; i < MyArray.length; i++) { if (MyArray[i] <= RandomNumber) continue; if
[2, 7, 5, 10]
如果我想得到2之后的下一个更大的数字,这是我的代码
var MyArray = [2, 7, 5, 10];
var RandomNumber = 2;
var MinGreaterThanPos;
for (var i =0; i < MyArray.length; i++) {
if (MyArray[i] <= RandomNumber)
continue;
if (typeof(MinGreaterThanPos) == 'undefined' || MyArray[i] < MinGreaterThanPos)
{
MinGreaterThanPos = i;
}
}
alert(MyArray[MinGreaterThanPos]);
我只想用位置
做同样的事情。如果我选择位置2,那么我希望得到的下一个位置是4,而不是6。你可以使用这个
var ar = [2,7,5,10];
Math.min.apply(undefined, ar.filter(function(x,y){return y > 0}));
//for any explanation, tell it in comment
解决问题的另一种方法是以下方法。最初,我们通过添加一个min方法来扩展数组,以便获得数组的最小元素。这是从一本书中摘取的。然后我们过滤数组,以便提取小于或等于阈值的enries。最后我们找到了最小值
Array.min=函数(数组){
返回Math.min.apply(数学,数组);
};
变量数=[2,7,5,10];
var数=5;
变量编号=编号。过滤器(函数(n){
返回n>number;
});
console.log(Array.min(number))代码>您可以在一次过程中完成此操作。它还考虑到了副本
var arr=[2,7,5,2,10],
结果=arr.reduce((p,c)=>c控制台日志(结果)代码>您可以先排序,然后循环遍历数组,直到找到下一个较大的值。这样,即使有多个值,也将始终具有第二个最低值
var MyArray = [2,7,5,10];
var RandomNumber = 2;
var MinGreaterThanPos;
sortedMyArray = MyArray.sort(function(a, b){return a-b});
for(var i in sortedMyArray) {
if (sortedMyArray[i] > RandomNumber) {
MinGreaterThanPos = i;
break;
}
}
alert(sortedMyArray[MinGreaterThanPos]);
您可以对位置执行以下操作:
var MyArray = [{user: 1, position:2}, {user:2, position: 6}, {user:3, position: 4}];
var RandomNumber = 2;
var MinGreaterThanPos;
sortedMyArray = MyArray.sort(function(a, b){return a.position-b.position});
for(var i in sortedMyArray) {
if (sortedMyArray[i].position > RandomNumber) {
MinGreaterThanPos = i;
break;
}
};
alert(sortedMyArray[MinGreaterThanPos]);
如果你不想使用随机数
var MyArray = [{user: 1, position:2}, {user:2, position: 6}, {user:3, position: 4}];
var MinGreaterThanPos;
sortedMyArray = MyArray.sort(function(a, b){return a.position-b.position});
for(var i in sortedMyArray) {
if (sortedMyArray[i].position > sortedMyArray[0].position) {
MinGreaterThanPos = i;
break;
}
};
alert(sortedMyArray[MinGreaterThanPos]);
你可以用
函数getItem(数组,搜索){
返回数组.reduce(函数(r,a){
返回a.position>search&(!r|r.position>a.position)&a:r;
},未定义);
}
var array1=[{user:1,position:2},{user:2,position:6},{user:3,position:4}],
array2=[{user:1,position:2},{user:2,position:6},{user:3,position:4},{user:4,position:5}];
日志(getItem(array1,2));
日志(getItem(array2,2))编码>首先对数组进行排序,如果存在重复项,则最后一项的下一项等于随机数
var MyArray=[2,2,2,10,7,5,5,7,5]//测试副本
var随机数=2;
var srt=MyArray.sort(函数(a,b){返回a-b});
var MinGreaterThanPos=srt[srt.lastIndexOf(随机数)+1];
警报(MinGreaterThanPos)
返回大于el的数组元素的最小值:
函数minNext(a,el){
var min=无穷大;
for(设a的x){
如果(x>el&&x-el log(x,minNext(a,x))
当数组为[5,2,7,10]时,预期结果为7。是吗?@SagnikChakraborti根据上面的例子你可以想到这一点<代码>提示
:关注过滤器
功能,该功能是什么?有关此方法的详细说明,请参见此处。如果你做不到,就告诉我。对于number=5
,它应该返回7
,而不是2
@georg-hm…你说得很对!非常感谢你发现了这一点。我会立即纠正,如果有最小值的重复,我会更新我的反应。我在你的帖子中看到,你将得到下一个大数量的变量“RandomNumber”。如果不是这样,您可以循环遍历数组,直到找到下一个不等于第一个的大数字,在本例中是sorterMyArray[0]。如果我的数组是var数组=[{user:1,position:2},{user:2,position:6},{user:3,position:4},{user:4,position 5}]
,我搜索number=5
,然后它返回undefined
它应该返回的位置6
我得到了想要的结果,请参见第三个示例。不考虑重复项如何?它应该支持重复。请参阅更新的数组。我使用了lastIndexOf()+1
是的,抱歉。不,先生,很高兴看到您的评论:)
var MyArray = [{user: 1, position:2}, {user:2, position: 6}, {user:3, position: 4}];
var MinGreaterThanPos;
sortedMyArray = MyArray.sort(function(a, b){return a.position-b.position});
for(var i in sortedMyArray) {
if (sortedMyArray[i].position > sortedMyArray[0].position) {
MinGreaterThanPos = i;
break;
}
};
alert(sortedMyArray[MinGreaterThanPos]);