JS:按两个字段对数组排序

时间:2018-09-30 11:42:12

标签: javascript sorting ecmascript-6

现在我有这样的代码:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^domain1.com 
RewriteRule ^(.*)$ newdomain.com/$1 [R=permanent,L]

我想对这种数组进行排序

    sortArticles = (someArray) => {
        const result = [];

        let isValid = someArray.filter(item => item.isValid);
        let isInvalid = someArray.filter(item => !item.isValid);

        valid = funcSortArrayOfObjByKey(arrayChecked, 'article');
        invalid = funcSortArrayOfObjByKey(arrayUnchecked, 'article');
        // funcSortArrayOfObjByKey - is a function to sort, a kind of lodash implementation without unnecessary dependency 

        return result.concat(valid).concat(invalid);
    }

结果,我想看到这样的数组:

[
    {
        article: 'Some New Zarticle',
        isValid: false
    },
    {
        article: 'Some New Article',
        isValid: false
    },
    {
        article: 'Some New Zzarticle',
        isValid: true
    },
]

因此:我需要某种类型的两个数组:第一个数组和第二个数组(一个带有'isValid',另一个没有),并且两个数组都应按'article'进行排序。这有可能吗? 我也尝试过这种方式:

[
    {
        article: 'Some New Zzarticle',
        isValid: true
    },
    {
        article: 'Some New Article',
        isValid: false
    },
    {
        article: 'Some New Zarticle',
        isValid: false
    },
]

但是它并没有按照我想要的方式工作...

2 个答案:

答案 0 :(得分:1)

您的分支是反向的:

someArray.sort((a, b) => {
  if (a.isValid != b.isValid) {
//              ^^
    return b.isValid - a.isValid;
  } else {
    return a.article.localeCompare(b, undefined, { sensitivity: 'base' });
  }
}) 

答案 1 :(得分:0)

我能够使用此方法根据isValid和文章对数组进行排序。

someArray.sort(function(a, b) {
    if (a.isValid === b.isValid) {
        return a.article.localeCompare(b.article);
    } else {
        return (a.isValid) ? -1 : 1;
    }
});