首页 > 解决方案 > 使用空的while循环来增加一个值好吗?

问题描述

我有一种情况,我需要将一个整数递减到不在数组中但低于 6 的最高 int。我这样做了:

var x = 6;
var arr = [3,5,6];
while(arr.indexOf(--x) > -1){}
console.log(x); //4

x = 6;
arr = [4,5,6];
while(arr.indexOf(--x) > -1){}
console.log(x); //3

这可以接受吗?我应该使用一个空的while循环来做到这一点......

***编辑 --> ES6 不是一个选项。

***编辑 2 --> 在这种情况下,数组中的值永远不会高于 6。(最大值已知)

***编辑 3 --> 我看到三个很棒的答案。我出于三个原因将 CodeManiac 的答案标记为已接受。

  1. 他第一个回答。
  2. 他的答案似乎和其他答案一样有效。
  3. 他展示了 ES6 和非 ES6 的实现。

标签: javascript

解决方案


我会这样做。我不会使用 indexOf。

这里的想法是

  • 首先按降序对数组进行排序。
  • 现在匹配来自0th索引的值。
  • 如果我们找到匹配,我们减少value1增加index1
  • 一旦我们找到不匹配的值,我们就会跳出 while 循环并返回该值。

const lessthan = (arr,value) => {
  arr = Object.values(arr.reduce((op,inp)=>((op[inp] ? op[inp] : op[inp]=inp),op),{}))
  arr.sort((a, b) => b-a)
  let i = 0;
  while( true ) {
    if( value === arr[i] ){
      --value;
      i++;
    } else {
      return value;
    }
  }

}

console.log(lessthan([4,5,6],6))
console.log(lessthan([3,4,6],6))
console.log(lessthan([3,6,6],6))

不支持 ES6,您只需将变量分配更改为正常功能,如下例所示。

function lessthan(arr,value) {
  arr.sort((a,b) => b-a)
  var i=0;
  while(true){
    if(value === arr[i]){
      --value;
      i++
    } else {
      return value
    }
  }
}


console.log(lessthan([4,5,6],6))
console.log(lessthan([3,4,6],6))


推荐阅读