【问题标题】:Sorting JSONarray by nested property按嵌套属性对 JSONarray 进行排序
【发布时间】:2017-08-16 00:16:15
【问题描述】:

我正在尝试对 JSON 值数组进行排序,但要排序的属性嵌套在 JSON 对象中。对于此示例,将使用 data.nested-name 进行排序。

我尝试使用https://stackoverflow.com/a/8175221/2053159,但没有任何成功。

[
{
name: 'a75',
data: {nested-name:"zz\, Hello// There="}},
{
name: 'z32',
data: {nested-name:"aa\, Hello// There="}},
];

预期输出 ->

[
{
name: 'a75',
data: {nested-name:"aa\, Hello There="}},
{
name: 'z32',
data: {nested-name:"zz\, Hello There="}},
];

嵌套名称确实包含许多反斜杠和正斜杠以及其他特殊字符。 我不使用外部库,请提供使用原生 JavaScript 的解决方案。

【问题讨论】:

  • 使用data['nested-name']

标签: javascript json sorting


【解决方案1】:

假设 arr 是你的数组,你可以这样排序:

arr.sort( ( a, b ) => a.data[ "nested-name" ] > b.data[ "nested-name" ] )

要获得更高的字符串比较精度,您可以使用localeCompare

arr.sort( ( a, b ) => a.data[ "nested-name" ].localeCompare(b.data[ "nested-name" ]) )

【讨论】:

  • 如何忽略区分大小写?
  • @NewBee 添加toLowerCase()
  • => a.data["nested-name"].toLowerCase() > b.data[ "nested-name" ].toLowerCase() - 或使用=> a.data["nested-name"].localeCompare(b.data["nested-name"])
【解决方案2】:

array.sort 函数采用可选参数function(a,b),根据比较,该参数必须返回-1, 0, or 1
您的数据定义包含错误nested-name:"zz\, Hello// There="。如果您使用-,则必须引用名称。
工作样本在这里。

var arr=[
{
name: 'a75',
data: {'nested-name':"zz\, Hello// There="}},
{
name: 'z32',
data: {'nested-name':"aa\, Hello// There="}},
];

var result=arr.sort(function(a,b){
  return a.data["nested-name"] > b.data["nested-name"];
  });
  console.log(result);

【讨论】:

  • 如何忽略区分大小写?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 2015-10-20
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多