如图所示,定义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。