chào các bạn, mình đang có thắc mắc về sort trong js.
Ở đây mình có tạo một mảng gồm có các đối tượng với các thuộc tính tên,giá,số lương.
Mình sắp xếp chúng như trong đoạn code dưới đây.
var kho=[
{name:"waterngot",price:9000,soluong:6},
{name:"bút",price:5000,soluong:8},
{name:"thước",price:6000,soluong:10}
];
// sắp xếp price từ thấp đến cao
var sort_price=kho.sort(function(a,b){
return a.price-b.price;
});
// sắp xếp giá trị sản phẩm còn ở trong kho.
var gia_tri=kho.sort(function(a,b){
return a.price*a.soluong-b.price*b.soluong;
});
console.log("sắp xếp theo mặt hàng price từ thấp đến cao:")
console.log(sort_price);
console.log("sắp xếp theo mặt hàng giá trị từ thấp đến cao:")
console.log(gia_tri);
kết quả mình nhận được là:
sắp xếp theo mặt hàng price từ thấp đến cao:
[
{ name: 'bút', price: 5000, soluong: 8 },
{ name: 'waterngot', price: 9000, soluong: 6 },
{ name: 'thước', price: 6000, soluong: 10 }
]
sắp xếp theo mặt hàng giá trị từ thấp đến cao:
[
{ name: 'bút', price: 5000, soluong: 8 },
{ name: 'waterngot', price: 9000, soluong: 6 },
{ name: 'thước', price: 6000, soluong: 10 }
]
mình nhận thấy kết quả phần sắp xếp theo price không chính xác. nhưng khi mình cho nó chạy một mình như thế này:
var kho=[
{name:"waterngot",price:9000,soluong:6},
{name:"bút",price:5000,soluong:8},
{name:"thước",price:6000,soluong:10}
];
// sắp xếp price từ thấp đến cao
var sort_price=kho.sort(function(a,b){
return a.price-b.price;
});
console.log("sắp xếp theo mặt hàng price từ thấp đến cao:")
console.log(sort_price);
kết quả là:
sắp xếp theo mặt hàng price từ thấp đến cao:
[
{ name: 'bút', price: 5000, soluong: 8 },
{ name: 'thước', price: 6000, soluong: 10 },
{ name: 'waterngot', price: 9000, soluong: 6 }
]
đúng với ý tưởng của mình.
Vậy cho mình hỏi vì sao đoạn code thứ nhất nó lại chạy không đúng với 2 lần sắp xếp như vậy. Nếu là do cách JS biện dịch thì các bạn có thể giải thích qui trình biên dịch của JS cho mình với. code của mình được chạy trên trang repl.it
.