当我在数组中很少有两位数时,找到最大的数将返回错误的值

时间:2019-06-18 23:23:32

标签: javascript arrays loops

我正在尝试在数组中找到最大的数字。但是,只有所有数字均为一位数字时,我的代码才能给出正确的值。如果我输入两位数的数字,它将不会考虑。

const numb = ['7', '10', '8', '6', '7'];
let arr1 = numb[0];
for (let i = 1; i < numb.length; i++) {
  if (numb[i] >= arr1) {
    arr1 = numb[i];
  }
}

console.log(arr1);

const numb = ['7', '9', '8', '6', '7'];
let arr1 = numb[0];
for (let i = 1; i < numb.length; i++) {
  if (numb[i] >= arr1) {
    arr1 = numb[i];
  }
}

console.log(arr1);

第一个代码给我输出8,应该是10。 而第二个给我9。 我在这里想念什么?

5 个答案:

答案 0 :(得分:1)

您正在比较字符串-并且按字典顺序对它们进行比较。

"<img src='gallery-all/img1.jpg'>"
"<img src='gallery-all/img2.jpg'>"
"<img src='gallery-all/img3.jpg'>"
"<img src='gallery-all/img4.jpg'>"

还要注意,在数组中找到最大数字的最简单方法是使用const numb = [7, 10, 8, 6, 7]; let arr1 = numb[0]; for (let i = 1; i < numb.length; i++) { if (numb[i] >= arr1) { arr1 = numb[i]; } } console.log(arr1);进行扩频。

Math.max

答案 1 :(得分:0)

您正在比较字符串,它应该是数字。

const numb = [7,10,8,6,7];

'7' > '10'是正确的,它将7与1进行比较

答案 2 :(得分:0)

numb数组充满了字符串,而不是数字。您可以将数组更改为数字,或者如果不想编辑原始数组,请使用parseInt()

const numb = ['7','10','8','6','7'];
let arr1 = numb[0];
for (let i=1 ; i < numb.length ; i++)
{
 if(parseInt(numb[i]) >= parseInt(arr1)){
 arr1 = numb[i];
}
} console.log(arr1);


const numb = ['7','9','8','6','7'];
let arr1 = numb[0];
for (let i=1 ; i < numb.length ; i++)
{
if(parseInt(numb[i]) >= parseInt(arr1)){
 arr1 = numb[i];
}
} console.log(arr1);

答案 3 :(得分:0)

您的数组numb的类型为string。因此,实际上,您的循环不是例如检查1 > 2而是按字母顺序(字母顺序)在“ 2”之后检查“ 1”。 字符串“ 10”不一定比“ 8”大,而数字显然大于10。将您的数组更改为数字数组,而不是字符串。 const numb = [1, 5, 6, 2, 33]

答案 4 :(得分:0)

如果数组是数字数组,则您的代码可以工作,但是由于不是,所以您必须转换为数字:

const numb = ['7','10','8','6','7'];
let arr1 = +numb[0];
for (let i=1 ; i < numb.length ; i++) {
   if(+numb[i] >= +arr1){
     arr1 = +numb[i];
   }
} console.log(arr1); // 10

如您所见,这是可行的,因为我们通过+将所有字​​符串都转换为数字。您可以这样做,也可以将整个数组转换为之前的数字,然后开始迭代并保留其他代码。

就像FYI一样,有更多简洁的方法可以实现此结果:

由于您在字符串上有一个数组,并且试图找到一个数字,因此首选的方法是将字符串数组转换为数字,然后像这样简单地利用Math.max

const arr = ['7','10','8','6','9'];  // <-- array of strings
 
let r = Math.max(...arr.map(x => +x))  // <-- cast to number and find max

console.log(r) // 10

如果真的需要使用字符串,另一种选择是按降序对数组进行排序,并采用以下第一个元素:

const arr = ['7','10','8','6','9'];

let r = arr.sort((a,b) => b.localeCompare(a, undefined, { numeric: true }))[0]

console.log(r) // 10

这利用String.localeCompare方法及其numeric: true选项,该方法在排序时会考虑字符串中的数字。