javascript сортировка списка объектов, содержащих названия песен по алфавиту - PullRequest
0 голосов
/ 06 августа 2020

У меня есть список объектов в javascript, где ключ 'name' имеет строковое значение названия песни, я пытаюсь отсортировать этот список в порядке полей 'name', чтобы заголовки отображались в алфавитном порядке заказ, у меня есть полу-рабочее решение, но оно не смотрит на поле 'name', и я не уверен, как это исправить?

  var files = [
  {'name':"1. Pit om Akhshav Pit om Hayom"}, 
  {'name':'2. Rabbi Akiva'}, 
  {'name': '4. Kochavim Ba Dli'}, 
  {'name': '3. Yaldut'}, 
  {'name': '5. Simlat Klulot'}, 
  {'name': '12. Yaldi Enenu Yeled'},
  {'name': '6. Mayim Le David'}, 
  {'name': '7. Ahava Shel Tereza De Mon'}, 
  {'name': '8. Ba Ir Ha Zu Shalom'}, 
  {'name': '9. Ahavat Kayits'}, 
  {'name': '10. Tirza Yafa'}, 
  {'name': '11. Im Tevakshi'},
  ]

const sorted = Object.entries(files)
  .sort((a, b) => b[1].active - a[1].active)
  .reduce((r, [key, value]) => {
    r[key] = value
    return r
  }, {})

  console.log('sorted = ', sorted)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Ответы [ 2 ]

2 голосов
/ 06 августа 2020

Обновил мой ответ, чтобы отсортировать численно, чем альфа

    var files = [
  {'name':"1. Pit om Akhshav Pit om Hayom"}, 
  {'name':'2. Rabbi Akiva'}, 
  {'name': '4. Kochavim Ba Dli'}, 
  {'name': '3. Yaldut'}, 
  {'name': '5. Simlat Klulot'}, 
  {'name': '12. Yaldi Enenu Yeled'},
  {'name': '6. Mayim Le David'}, 
  {'name': '7. Ahava Shel Tereza De Mon'}, 
  {'name': '8. Ba Ir Ha Zu Shalom'}, 
  {'name': '9. Ahavat Kayits'}, 
  {'name': '10. Tirza Yafa'}, 
  {'name': '11. Im Tevakshi'},
  ];


files.sort((a, b) => (parseInt(a.name.split('.')[0]) > parseInt(b.name.split('.')[0])) ? 1 : (a.name.split('.')[1] === b.name.split('.')[1]) ? ((parseInt(a.name.split('.')[0]) > parseInt(b.name.split('.')[0])) ? 1 : -1) : -1 )
console.log(files);
1 голос
/ 06 августа 2020

files не является объектом. Object.entries работает не так, как вы ожидали.

Если вы хотите сначала отсортировать численно, а затем отсортировать по алфавиту, вам необходимо разделить имена и сравнить.

var files = [
  {'name':"1. Pit om Akhshav Pit om Hayom"}, 
  {'name':'2. Rabbi Akiva'}, 
  {'name': '4. Kochavim Ba Dli'}, 
  {'name': '3. Yaldut'}, 
  {'name': '5. Simlat Klulot'}, 
  {'name': '12. Yaldi Enenu Yeled'},
  {'name': '6. Mayim Le David'}, 
  {'name': '7. Ahava Shel Tereza De Mon'}, 
  {'name': '8. Ba Ir Ha Zu Shalom'}, 
  {'name': '9. Ahavat Kayits'}, 
  {'name': '10. Tirza Yafa'}, 
  {'name': '11. Im Tevakshi'},
  ]

files.sort((a,b) => {
  const [aNum, aStr] = a.name.split('. ');
  const [bNum, bStr] = b.name.split('. ');
  
  return aNum - bNum || aStr.localeCompare(bStr);
});
console.log('sorted = ', files);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...