【问题标题】:javascript sort list of objects containing song titles alphabeticallyjavascript按字母顺序对包含歌曲标题的对象列表进行排序
【发布时间】:2020-08-06 01:33:19
【问题描述】:

我在 javascript 中有一个对象列表,其中“名称”键具有歌曲标题的字符串值,我正在尝试按“名称”字段的顺序对该列表进行排序,以便标题按字母顺序显示,我有一个半可行的解决方案,但它没有查看“名称”字段,我不确定如何解决?

  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>

【问题讨论】:

  • 你期待什么?我的意思是,你能展示一下最终对象是如何排序的吗?

标签: javascript sorting


【解决方案1】:

将我的答案更新为数字排序,而不是 alpha

    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);

【讨论】:

  • 我需要先查看数值是否存在(假设在这种情况下确实如此,并且列表将始终以数字和句点开头,后跟空格和字符串)
  • 我明白了,我现在更了解您的要求了
【解决方案2】:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2021-10-31
    • 2013-05-02
    • 2014-02-08
    相关资源
    最近更新 更多