Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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_Sorting - Fatal编程技术网

在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-ellog(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]);