JS: сортировать массив по двум полям - PullRequest
0 голосов
/ 30 сентября 2018

Теперь у меня есть такой код:

    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
    },
]

Итак: мне нужно иметь два вида массивов: первый и второй (один с «isValid», другой без), и оба они должны быть отсортированы по «статье».Можно ли это как-то сделать?Я пробовал также так:

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

но он не работает так, как я хочу ...

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Я смог использовать этот метод для сортировки вашего массива на основе isValid, а затем статьи.

someArray.sort(function(a, b) {
    if (a.isValid === b.isValid) {
        return a.article.localeCompare(b.article);
    } else {
        return (a.isValid) ? -1 : 1;
    }
});
0 голосов
/ 30 сентября 2018

Ваши ветви перевернуты:

someArray.sort((a, b) => {
  if (a.isValid != b.isValid) {
//              ^^
    return b.isValid - a.isValid;
  } else {
    return a.article.localeCompare(b, undefined, { sensitivity: 'base' });
  }
}) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...