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

Javascript JS:按两个字段对数组排序,javascript,sorting,ecmascript-6,Javascript,Sorting,Ecmascript 6,现在我有了这样的代码: sortArticles = (someArray) => { const result = []; let isValid = someArray.filter(item => item.isValid); let isInvalid = someArray.filter(item => !item.isValid); valid = funcSortArrayOfObjByK

现在我有了这样的代码:

    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
    },
]
[
    {
        article: 'Some New Zzarticle',
        isValid: true
    },
    {
        article: 'Some New Article',
        isValid: false
    },
    {
        article: 'Some New Zarticle',
        isValid: false
    },
]
因此,我希望看到这样的阵列:

[
    {
        article: 'Some New Zarticle',
        isValid: false
    },
    {
        article: 'Some New Article',
        isValid: false
    },
    {
        article: 'Some New Zzarticle',
        isValid: true
    },
]
[
    {
        article: 'Some New Zzarticle',
        isValid: true
    },
    {
        article: 'Some New Article',
        isValid: false
    },
    {
        article: 'Some New Zarticle',
        isValid: false
    },
]
所以:我需要有两个数组:第一个和第二个(一个带'isValid',另一个不带),它们都应该按'article'排序。这有可能吗? 我也试过这样做:

someArray.sort((a, b) => {
  if (a.isValid === b.isValid) {
    return b.isValid - a.isValid;
  } else {
    return a.article.toLowerCase().localeCompare(b.article.toLowerCase());
  }
}) 

但它没有按我的要求工作…

您的分支已反转:

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

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

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

请注意,您的
sortArticles()?哪个字段可能会丢失,您想如何处理它?@brabertaser19当然最简单的修复方法是让您的对象始终有效,只需在排序之前添加字段。例如,isValid可以是未定义的(当然,通常不会发生……但是)@brabertaser19但是什么?让它永远不会发生。如果希望排序处理
isValid
值,而不是
true
false
,则需要调整排序以明确执行此操作。