获取数组中最接近(但更高)的数字

时间:2019-02-06 13:07:17

标签: javascript arrays algorithm

我有一个电话号码165

我有一个数字数组。像这样:

[2,42,82,122,162,202,242,282,322,362]

我希望我得到的数字更改为数组中最近但更高的数字。

例如,我得到165,应该加到202

javascript数组

5 个答案:

答案 0 :(得分:1)

这是使用Array.forEach()的方法:

const number = 165;
const candidates = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];

//looking for the lowest valid candidate, so start at infinity and work down
let bestCandidate = Infinity;

//only consider numbers higher than the target
const higherCandidates = candidates.filter(candidate => candidate > number);

//loop through those numbers and check whether any of them are better than
//our best candidate so far
higherCandidates.forEach(candidate => {
    if (candidate < bestCandidate) bestCandidate = candidate;
});

console.log(bestCandidate); //the answer, or Infinity if no valid answers exist

答案 1 :(得分:0)

在插入后需要排序数组:

let list = [10, 20, 50];
let elementToInsert = 40;
list.push(elementToInsert);
list.sort(function(a, b) {
  return a - b;
});

返回值必须为[10、20、40、50]

答案 2 :(得分:0)

这里是如何获取array中的下一个更高元素的方法。只需在循环内进行比较即可。

var arr = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];
var n = arr.length; 
getNextGreater(arr, n); 
   function getNextGreater(arr,  n) { 
        var next, i, j; 
        for (i=0; i<n; i++)  { 
            next = -1; 
            for (j = i+1; j<n; j++) { 
                if (arr[i] < arr[j]) { 
                    next = arr[j]; 
                    break; 
                } 
            } 
            console.log(arr[i]+" next greater is -- "+next); 
        } 
    } 
       
  

答案 3 :(得分:0)

您可以通过对数组进行排序并对其进行迭代以找到满足您条件的第一个值来完成此操作:

const getFirst = (arr, predicate) => {
  for (const val of arr) {
    if (predicate(val)) return val;
  }
  return undefined;
}

const x = getFirst([2, 42, 82, 122, 162, 202, 242, 282, 322, 362].sort(), x => x > 165);

console.log(x);

答案 4 :(得分:0)

对于您的具体示例:

var array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];
var found = array.find(function(element) {return element > 165;});

登录找到时,您将始终获得202。

这将始终返回大于您的数字的第一个元素, 在逻辑上是最接近和更高的