首页 > 解决方案 > 排序当前根据其他参数进行排序。如何根据javascript中的一个特定参数进行排序?

问题描述

当根据一个参数对数组进行排序时,它依赖于另一个参数对其进行排序。我想忽略参数并完全根据我的参数进行排序。

我创建了一个辅助函数,它根据我的参数对数组进行排序,它的工作原理如下:

例如我有名字和价格,我的数组是这样的

[{名称:“A”,价格:5},{名称:“A”,价格:70},{名称:“A”,价格:12},{名称:“A”,价格:576},{名称:“C”,价格:300}。{名称:“C”,价格:899},{名称:“B”,价格:12},{名称:“B”,价格:40},{名称: “B”,价格:15}]

对价格进行排序后,我得到: [{name:"A", price:576},{name:"A", price:70},{name:"A", price:12},{name:"A" ,价格:5},{名称:“C”,价格:899}。{名称:“C”,价格:300},{名称:“B”,价格:40},{名称:“15”,价格:12},{名称:“B”,价格:8}]

我希望它忽略名称并仅按价格排序... 899,576,300,70...

这是根据我选择的参数进行排序的辅助函数:

const propComparator = (propName) =>
    (a, b) => a[propName] == b[propName] ? 0 : a[propName] < b[propName] ? -1 : 1

我所做的是将项目添加到一个集合中,然后在几个 for 循环完成后将项目添加到集合中,我将它变成一个数组并像这样排序:

let topArray = Array.from(topSet).sort(propComparator('price'));

标签: javascriptnode.jsmongodbexpress

解决方案


您的代码按我的预期运行:

var topSet = [
    { name: "A", price: 5 },
    { name: "A", price: 70 },
    { name: "A", price: 12 },
    { name: "A", price: 576 },
    { name: "C", price: 300 },
    { name: "C", price: 899 },
    { name: "B", price: 12 },
    { name: "B", price: 40 },
    { name: "B", price: 15 }
];
var propComparator = function (propName) {
    return function (a, b) {
        return a[propName] == b[propName] ? 0 : a[propName] < b[propName] ? -1 : 1;
    };
};
var topArray = Array.from(topSet).sort(propComparator('price'));

console.log(topArray.map(function (a) { return JSON.stringify(a); }).join(",\n"));


推荐阅读