我正在从 json 文件获取信息,并且我正在尝试排序 asc 和 desc。这是我到目前为止的代码:
$scope.fromLessToMore = function(){
var filteringBy = [];
$http.get('/app/json/file.json')
.then(function(data){
$scope.listOfProducts = data.data.products;
for(var i = 0; i< $scope.listOfProducts.length; i++){
if($scope.listOfProducts[i].id === $scope.inside){
filteringBy.push($scope.listOfProducts[i]);
}
}
//$scope.normalData = filteringBy;
$scope.dataOnFilter = filteringBy.sort((a, b) => (a.price > b.price) ? 1 : ((b.price > a.price) ? -1 : 0));
});
}
如您所见,我正在使用 filteringBy.sort((a, b) => (a.price > b.price) ? 1 : ((b.price > a.price) ? - 1 : 0));
它可以工作,但是数字的顺序如下:
1 美元、100 美元、1000 美元、2 美元、200 美元、3 美元、30 美元
如何才能正确订购($1、$2、$3、$30...)?我尝试过 ES6:filteringBy.sort((a,b) => a.price - b.price);
和 filteringBy.sort((a,b) => a - b.price);
但不起作用,并且控制台上没有任何错误。
有人可以帮助我吗?
我正在使用 AngularJs 和 Javascript。
最佳答案
我不鼓励这样排序,但您可以使用 \D
替换非数字值,然后应用排序。
filteringBy = ['$1', '$100', '$1000', '$2', '$200', '$3', '$30'];
var filtered = filteringBy.sort((a, b) => {
var aPrice = parseInt(a.replace(/\D/g,''));
var bPrice = parseInt(b.replace(/\D/g,''));
return (aPrice > bPrice) ? 1 : ((bPrice > aPrice) ? -1 : 0)
});
console.log(filtered);
您应该尝试使用数据库本身的整数。
关于javascript - 使用 .sort 对数组中的数据进行 asc 或 desc 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53368367/