javascript - 使用 .sort 对数组中的数据进行 asc 或 desc 排序

标签 javascript angularjs

我正在从 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/

相关文章:

angularjs - Angular 时间选择器在 Angular 应用程序中不起作用

javascript - Angular js 网站刚刚停止工作

jquery - Bootstrap多选: close dropdown for each checkbox selection

javascript - 新项目的 angularJS vs angular 2

javascript - JWT 身份验证和授权

javascript - 运行 google 脚本后将每一行标记为成功

javascript - 如何使用 Angular JS 常量值

javascript - 在输入键上提交文本字段(AJAX)

javascript - 如何使用 jquery 自动隐藏输入字段中的占位符文本

javascript - 当其中的输入具有焦点时,保持非事件导航选项卡显示