我正在尝试在数组中找到最大的数字。但是,只有所有数字均为一位数字时,我的代码才能给出正确的值。如果我输入两位数的数字,它将不会考虑。
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。 我在这里想念什么?
答案 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
选项,该方法在排序时会考虑字符串中的数字。