Javascript 函数按3列对列表进行排序,并通过修改将其初始化

Javascript 函数按3列对列表进行排序,并通过修改将其初始化,javascript,list,sorting,list.js,Javascript,List,Sorting,List.js,我有一张桌子要整理。它目前有3列: 货币代码|账户编号|支票箱代码 我想排序它首先按货币,然后按复选框(选中的顶部),最后按帐号。但是,还需要进行一次修改-初始加载时,带有特定货币(“PLN”)的行应显示在表的顶部。之后,所有剩余行应按正常顺序排序 我使用list.js对行进行排序。我编写了以下排序函数: const options = { valueNames: ['currencyTd', 'accountNoTd', 'checkboxTd'] }; co

我有一张桌子要整理。它目前有3列:

货币代码|账户编号|支票箱代码

我想排序它首先按货币,然后按复选框(选中的顶部),最后按帐号。但是,还需要进行一次修改-初始加载时,带有特定货币(“PLN”)的行应显示在表的顶部。之后,所有剩余行应按正常顺序排序

我使用list.js对行进行排序。我编写了以下排序函数:

const options = {
        valueNames: ['currencyTd', 'accountNoTd', 'checkboxTd']
    };

    const accountsList = new List('accountsList', options);

    accountsList.sort('currencyTd', {
        order: 'asc',            
        sortFunction: function (a, b) {  
            if ((a.currencyTd === 'PLN') != (b.currencyTd === 'PLN')) {
                return a.currencyTd === 'PLN' ? 1 : -1;
            }
            return a.currencyTd > b.currencyTd ? 1 :
                   a.currencyTd < b.currencyTd ? -1 : 0;
        }

    });
const选项={
valueNames:['currencyTd'、'accountNoTd'、'checkboxTd']
};
const accountsList=新列表(“accountsList”,选项);
accountsList.sort('currencyTd'{
订单:“asc”,
sortFunction:函数(a,b){
如果((a.currencyTd=='PLN')!=(b.currencyTd=='PLN')){
返回a.currencyTd==‘PLN’?1:-1;
}
返回a.currencyTd>b.currencyTd?1:
a、 currencyTd
但它没有按我预期的方式工作。我会做错什么


编辑:我忘了添加-此时我编写的当前函数(如上面的代码)应该只按货币列对其进行排序。当我实现它时,我想添加其他列的排序。

您可以对所有排序标准使用链式方法

var数组=[
{currencyTd:'DEF',accountNoTd:2,checkboxTd:0},
{currencyTd:'ABC',accountNoTd:2,checkboxTd:1},
{currencyTd:'PLN',accountNoTd:2,checkboxTd:1},
{currencyTd:'ABC',accountNoTd:2,checkboxTd:0},
{currencyTd:'PLN',accountNoTd:3,checkboxTd:0},
{currencyTd:'DEF',accountNoTd:2,checkboxTd:1},
{currencyTd:'DEF',accountNoTd:3,checkboxTd:0},
{currencyTd:'PLN',accountNoTd:3,checkboxTd:1},
{currencyTd:'ABC',accountNoTd:1,checkboxTd:0},
{currencyTd:'ABC',accountNoTd:1,checkboxTd:1},
{currencyTd:'PLN',accountNoTd:2,checkboxTd:0},
{currencyTd:'PLN',accountNoTd:1,checkboxTd:0},
{currencyTd:'ABC',accountNoTd:3,checkboxTd:1},
{currencyTd:'DEF',accountNoTd:1,checkboxTd:0},
{currencyTd:'ABC',accountNoTd:3,checkboxTd:0},
{currencyTd:'DEF',accountNoTd:1,checkboxTd:1},
{currencyTd:'PLN',accountNoTd:1,checkboxTd:1},
{currencyTd:'DEF',accountNoTd:3,checkboxTd:1}
];
array.sort(函数(a,b){
返回(
(a.currencyTd!=“PLN”)-(b.currencyTd!=“PLN”)| |//将PLN排序到顶部
a、 currencyTd.localeCompare(b.currencyTd)| |//排序currencyTd ASC
a、 accountNoTd-b.accountNoTd | |//排序accountNoTd ASC
a、 checkboxTd-b.checkboxTd//sort checkboxTd-ASC
);
});
console.log(数组)

.as控制台包装{max height:100%!important;top:0;}
这很好,但只适用于第一列。忽略“or”运算符后面的下一行。在哪里?在上面我看到结果在顶部的
'PLN'
之后按
currencyTd
排序。不要忘记将返回后的部分用括号括起来,或者写在一行,因为。很抱歉,我刚从字符串中获取的值是错误的。sortFunction:function(a,b){return(b.\u values.currencyTd.indexOf('PLN')-a.'U values.currencyTd.indexOf('PLN')a.'U values.currencyTd.localeCompare(b.'U values.currencyTd)| b.'U values.indexOf('checked')-a.'U values.checkboxTd.indexOf('checked')| b.'U values.accountNoTd.replace(/\s/g'))>a.'U values.accountNoTd.replace(/\s/g')) ? -1 : 1 ); }