Как переместить элементы на вершину в массиве объектов? - PullRequest
1 голос
/ 27 марта 2019

У меня есть массив как:

var user = [{name: 'name1', isActive: false}, {name: 'name2', isActive: false}, {name: 'name3', isActive: true}, {name: 'name4', isActive: false}, {name: 'name9', isActive: true}, {name: 'name8', isActive: false}];

Я хочу отсортировать массив так, чтобы пользователь с isActive был равен true, и все были перенесены наверх.Я попытался следовать, но это не сработало.

user.sort(function(a,b){
    a.isActive ? 1 : b.isActive ? -1 : 0
});

Ответы [ 7 ]

1 голос
/ 27 марта 2019

var user = [{name: 'name1', isActive: false}, {name: 'name2', isActive: false}, {name: 'name3', isActive: true}, {name: 'name4', isActive: false}, {name: 'name9', isActive: true}, {name: 'name8', isActive: false}];

user.sort(function(a, b){return b.isActive - a.isActive;});
console.log(user);
1 голос
/ 27 марта 2019

это короче

user.sort(function(a, b) {
  return b.isActive - a.isActive
})

арифметическая операция над логическим значением приводит логическое значение к целому (1 для true и 0 для false), и если функция сравнения возвращает отрицательное значение, a предшествует b. Если a истинно, а b ложно, a будет помещено перед b. Если b верно и a ложно, b ставится перед a.

0 голосов
/ 27 марта 2019

самое простое решение вашей проблемы: user.sort ((a, b) => b.isActive)

Здесь, если у объекта не будет свойства isActive, он по умолчанию будет считать его ложным. Надеюсь, это поможет:)

0 голосов
/ 27 марта 2019

Не нравится использовать - между двумя логическими значениями, мое решение будет таким, также оно хорошо работает при отсутствии свойства isActive.

var users = [{name: 'name1', isActive: false}, {name: 'name2', isActive: false}, {name: 'name3', isActive: true}, {name: 'name4', isActive: false}, {name: 'name8', isActive: true}, {name: 'name9', isActive: false}, {name: 'name10'}];

users.sort(function(l, u) {
    var lv = l.isActive ? 1 : 2, uv = u.isActive ? 1 : 2;
    return lv - uv;
});

console.log(users);
0 голосов
/ 27 марта 2019

Пожалуйста, используйте его, спасибо

var user = [
{
    name: 'name1', isActive: false
}, 
{
    name: 'name2', isActive: false
}, 
{
    name: 'name3', isActive: true
},
{
    name: 'name4', isActive: false
},
{
    name: 'name9', isActive: true
},
{
    name: 'name8', isActive: false
}
];
let sortedUser = user.sort(function(a,b){
   if (!b.isActive) {
        return -1;
    } else if (b.isActive) {
        return 1;
    }
    return 0;
});
console.log("Sorted", sortedUser);
0 голосов
/ 27 марта 2019

Попробуйте, надеюсь, это вам поможет.Спасибо

var user = [{name: 'name1', isActive: false}, {name: 'name2', isActive: false}, {name: 'name3', isActive: true}, {name: 'name4', isActive: false}, {name: 'name9', isActive: true}, {name: 'name8', isActive: false}];

user.sort(function(x, y) {
  return (x.isActive === y.isActive)? 0 : x.isActive? -1 : 1;
});
0 голосов
/ 27 марта 2019

Я нашел решение как:

user.sort(function(a,b){
   if (!b.isActive) {
        return -1;
    } else if (b.isActive) {
        return 1;
    }
    return 0;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...