微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用javascript按键值对json对象进行排序

如何解决使用javascript按键值对json对象进行排序

我正在尝试按键对 json 对象进行排序,但键有时包含一个数组,因此它对数据的排序不正确。我的函数的问题:它不比较数组的索引,我只想按完整键对数据进行排序。

低于错误输出结果。

const byKey = o =>
 Object.keys(o)
   .sort()
   .reduce((r,k) => ((r[k] = o[k]),r),{});

错误输出结果

{
  "admin.name":"Okdaro fripi:","amazon.token":"kqjndkJQNDjkmdnJKQDNKmjdqnmjdnQKMD","data.content":"ABCD","dimitro.job":"create","person.account.email[0].card[0]":"VISA","person.account.email[0].firstname":"George Blaksar","person.account.email[0].org":"gmail","person.account.email[10].card[0]":"yalla","person.account.email[10].firstname":"qabte","person.account.email[10].org":"amazon","person.account.email[1].card[0]":"Master card","person.account.email[1].firstname":"balbi","person.account.email[1].org":"yahoo","person.account.email[2].card[0]":"payoneer","person.account.email[2].firstname":"pinaro","person.account.email[2].org":"facebook",...
  "person.account.email[9].card[0]":"yalla","person.account.email[9].firstname":"qabte","person.account.email[9].org":"amazon","zend.port":99
}

低于我想要的

{
 "admin.name": "Okdaro fripi:","amazon.token": "kqjndkJQNDjkmdnJKQDNKmjdqnmjdnQKMD","data.content": "ABCD","dimitro.job": "create","person.account.email[0].card[0]": "VISA","person.account.email[0].firstname": "George Blaksar","person.account.email[0].org": "gmail","person.account.email[1].card[0]": "Master card","person.account.email[1].firstname": "balbi","person.account.email[1].org": "yahoo","person.account.email[2].card[0]": "payoneer","person.account.email[2].firstname": "pinaro","person.account.email[2].org": "facebook","person.account.email[3].card[0]": "aws","person.account.email[3].firstname": "zartb","person.account.email[3].org": "amazon","person.account.email[4].card[0]": "Master card 4","person.account.email[4].firstname": "blinago ","person.account.email[4].org": "yahoo","person.account.email[5].card[0]": "lbl","person.account.email[5].firstname": "tarficana","person.account.email[5].org": "netflix","person.account.email[6].card[0]": "yalla","person.account.email[6].firstname": "qabte","person.account.email[6].org": "amazon","person.account.email[7].card[0]": "Master card 4","person.account.email[7].firstname": "blinago ","person.account.email[7].org": "yahoo","person.account.email[8].card[0]": "lbl","person.account.email[8].firstname": "tarficana","person.account.email[8].org": "netflix","person.account.email[9].card[0]": "yalla","person.account.email[9].firstname": "qabte","person.account.email[9].org": "amazon","person.account.email[10].card[0]": "yalla","person.account.email[10].firstname": "qabte","person.account.email[10].org": "amazon","zend.port": 99
}

解决方法

您可以使用 String#localeCompare 并使用按字符串组排序的 options 对键进行排序。

const
    object = {
        "admin.name": "Okdaro fripi:","amazon.token": "kqjndkJQNDjkmdnJKQDNKmjdqnmjdnQKMD","data.content": "ABCD","dimitro.job": "create","person.account.email[0].card[0]": "VISA","person.account.email[0].firstname": "George Blaksar","person.account.email[0].org": "gmail","person.account.email[10].card[0]": "yalla","person.account.email[10].firstname": "qabte","person.account.email[10].org": "amazon","person.account.email[1].card[0]": "Master card","person.account.email[1].firstname": "balbi","person.account.email[1].org": "yahoo","person.account.email[2].card[0]": "payoneer","person.account.email[2].firstname": "pinaro","person.account.email[2].org": "facebook","person.account.email[9].card[0]": "yalla","person.account.email[9].firstname": "qabte","person.account.email[9].org": "amazon","zend.port": 99
    };

console.log(Object.fromEntries(Object
    .entries(object)
    .sort(([a],[b]) => a.localeCompare(b,undefined,{ numeric: true,sensitivity: 'base' })))
);
.as-console-wrapper { max-height: 100% !important; top: 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?