首页 > js数组一个奇怪的问题

js数组一个奇怪的问题

如图所示,定义a、b两个数组,然后进行循环比较,c数组存放两个数组比较后的那个较小的值,结果c数组的第一个值是那个较大的值,剩下的才是较小的值,请问这是什么原因?

备注:(代码如下)

var a = ["429", "14302", "1", "0", "0", "159", "20", "0"];
var b = ["1542", "46886", "4", "0", "0", "644", "2", "0"];
var c = [];
for(var i = 0, length = a.length; i < length; i++) {

if(a[i] < b[i]) {
    c.push(a[i]);
} else {
    c.push(b[i]);
}

}
console.log(c);


楼上正解~

var a = ["429", "14302", "1", "0", "0", "159", "20", "0"];
var b = ["1542", "46886", "4", "0", "0", "644", "2", "0"];
var c = [];
for(var i = 0, length = a.length; i < length; i++) {

if(Number(a[i]) < Number(b[i])) {

c.push(a[i]);

} else {

c.push(b[i]);

}
}
console.log(c);


var a = ["429", "14302", "1", "0", "0", "159", "20", "0"];

var b = ["1542", "46886", "4", "0", "0", "644", "2", "0"];
var c = []; 
for(var i = 0;i<a.length; i++) { 
    if (a[i]>b[i]) {  //在这个地方,你的a[i] < b[i],你放入的是a的元素,大于b的时候,放入的还是b
        c.push(a[i]); 
    } else { 
        c.push(b[i]); 
    } 
} 
console.log(c);

先将字符串转成数字再比较 否则是按 ASCII 码比较大小

console.log('429' < '14302'); // false
console.log(Number('429') < Number('14302')) // true

这要看你是怎么理解大小的定义 -- 字符串的大小是默认情况下是从左往右ASCII码的大小。如果要按数字大小,则应该转换为Number然后比较,修改后的具体代码如下:


var a = ["429", "14302", "1", "0", "0", "159", "20", "0"];
var b = ["1542", "46886", "4", "0", "0", "644", "2", "0"];
var c = [];
for(var i = 0, length = a.length; i < length; i++) {

    if (+a[i] < +b[i]) {      // -- 这里修改下!
        c.push(a[i]);
    } else {
        c.push(b[i]);
    }
}
console.log(c);
// => ["429", "14302", "1", "0", "0", "159", "2", "0"]

因为默认进行了字符串比较,按照字典序排序的话,c确实应该是["1542", "14302", "1", "0", "0", "159", "2", "0"]。
你想实现数学排序的话,得先把字符串转化为数字再比较


因为你在比较字符串!


因为你比较的是 String 而不是 Number。

【热门文章】
【热门文章】