#javascript #arrays #sorting
#javascript #массивы #сортировка
Вопрос:
У меня есть следующий массив твитов:
tweets: [{
"body": "RT blah blah blah",
"image": "",
"screen_name": "billsmith",
"timestamp": "2016-02-28 08:19:02"
}, {
"body": "RT blah blah blah",
"image": "http://www.image.com",
"screen_name": "JoeBloggs_",
"timestamp": "2016-06-28 07:37:40"
}]
Как мне упорядочить изображение, чтобы твиты с изображениями появлялись первыми? Итак, в принципе, я хочу, чтобы твиты с "image": ""
появлялись последними.
Я попробовал следующую функцию для изменения порядка элементов, но она не работает:
tweets.sort(function(a, b) {
return a.image - b.image;
});
Любые идеи приветствуются. Я рад использовать решение, которое использует обычный JavaScript или Lodash.
Ответ №1:
Вы могли бы использовать sort()
вот так.
var tweets = [{
"body": "RT blah blah blah",
"image": "",
"screen_name": "billsmith",
"timestamp": "2016-02-28 08:19:02"
}, {
"body": "RT blah blah blah",
"image": "http://www.image.com",
"screen_name": "JoeBloggs_",
"timestamp": "2016-06-28 07:37:40"
}]
tweets.sort(function(a, b) {
if (b.image.length) {
return 1;
} else {
return -1;
}
})
console.log(tweets)
Ответ №2:
Это предложение сортирует только заполненные строки сверху, а пустые строки снизу, без какой-либо другой сортировки.
var tweets = [{ body: "RT blah blah blah", image: "", screen_name: "billsmith", timestamp: "2016-02-28 08:19:02" }, { body: "RT blah blah blah", image: "http://www.image.com", screen_name: "JoeBloggs_", timestamp: "2016-06-28 07:37:40" }];
tweets.sort(function(a, b) {
return !a.image - !b.image;
});
console.log(tweets);
Комментарии:
1. Это сортирует по URL-адресу изображения, который не был запрошен OP, поэтому, возможно, нежелателен. Ответ Ненада Вракара, ИМХО, чище.
Ответ №3:
var tweets = [{
"body": "RT blah blah blah",
"image": "",
"screen_name": "billsmith",
"timestamp": "2016-02-28 08:19:02"
},{
"body": "RT blah blah blah",
"screen_name": "billsmith",
"timestamp": "2016-02-28 08:19:02"
}, {
"body": "RT blah blah blah",
"image": "http://www.image.com",
"screen_name": "JoeBloggs_",
"timestamp": "2016-06-28 07:37:40"
}]
tweets.sort(function(a, b) {
return !a.image || a.image === "" ? 1 : -1;
})
console.log(tweets)