JSON对象字符串数组多字段(多列)排序

曾经终败给现在 2022-06-03 05:24 248阅读 0赞

JSON对象字符串数组,多字段(多列)排序

今天看到我写的另一篇JSON对象数组排序的文章,突然想到了另一种,更简便,更快速的方法,排序结果跟原来的一样:

  1. function newSort(objArr, keyArr, type) {
  2. objArr.sort(function (objA, objB) {
  3. for (let i = 0; i < keyArr.length; i++) {
  4. var key = keyArr[i];
  5. if (objA[key] === objB[key]) {
  6. continue;
  7. }
  8. if (type === 'desc') {
  9. return objA[key] < objB[key];
  10. } else {
  11. return objA[key] > objB[key];
  12. }
  13. }
  14. });
  15. return objArr;
  16. }

// 测试数据

  1. var arr = [
  2. {
  3. name: 'titanic',
  4. addr: 'americ',
  5. type: 'film',
  6. size: 1024
  7. },
  8. {
  9. name: 'hunting',
  10. addr: 'china',
  11. type: 'tv',
  12. size: 10240
  13. },
  14. {
  15. name: 'drunken',
  16. addr: 'china',
  17. type: 'film',
  18. size: 2048
  19. },
  20. {
  21. name: 'lifetimes',
  22. addr: 'china',
  23. type: 'tv',
  24. size: 20
  25. },
  26. {
  27. name: 'lifetimes',
  28. addr: 'china',
  29. type: 'tv',
  30. size: 2
  31. },
  32. {
  33. name: 'lifetimes',
  34. addr: 'americ',
  35. type: 'tv',
  36. size: 204
  37. },
  38. {
  39. name: 'lifetimes',
  40. addr: 'americ',
  41. type: 'film',
  42. size: 20480
  43. }
  44. ];
  45. var newSort = newSort(JSON.parse(JSON.stringify(arr)), ['name', 'addr', 'type', 'size'], 'desc');
  46. console.log('排序前:');
  47. console.log(arr);
  48. console.log('新排序:');
  49. console.log(newSort);

打印结果

排序前:
[ { name: ‘titanic’, addr: ‘americ’, type: ‘film’, size: 1024 },
{ name: ‘hunting’, addr: ‘china’, type: ‘tv’, size: 10240 },
{ name: ‘drunken’, addr: ‘china’, type: ‘film’, size: 2048 },
{ name: ‘lifetimes’, addr: ‘china’, type: ‘tv’, size: 20 },
{ name: ‘lifetimes’, addr: ‘china’, type: ‘tv’, size: 2 },
{ name: ‘lifetimes’, addr: ‘americ’, type: ‘tv’, size: 204 },
{ name: ‘lifetimes’, addr: ‘americ’, type: ‘film’, size: 20480 } ]
新排序:
[ { name: ‘titanic’, addr: ‘americ’, type: ‘film’, size: 1024 },
{ name: ‘lifetimes’, addr: ‘china’, type: ‘tv’, size: 20 },
{ name: ‘lifetimes’, addr: ‘china’, type: ‘tv’, size: 2 },
{ name: ‘lifetimes’, addr: ‘americ’, type: ‘tv’, size: 204 },
{ name: ‘lifetimes’, addr: ‘americ’, type: ‘film’, size: 20480 },
{ name: ‘hunting’, addr: ‘china’, type: ‘tv’, size: 10240 },
{ name: ‘drunken’, addr: ‘china’, type: ‘film’, size: 2048 } ]

发表评论

表情:
评论列表 (有 0 条评论,248人围观)

还没有评论,来说两句吧...

相关阅读