【问题标题】:Natural sort in multidimensional arrays多维数组中的自然排序
【发布时间】:2016-12-05 16:08:15
【问题描述】:

我正在寻找一种解决方案,让多维数组使用 JavaScript 自然排序。我找到了一些对多维数组进行排序或自然排序的解决方案,但我没有找到满足这两个要求的解决方案。

我也无法组合解决方案。 这是数组的样子:

var content = [
{0: 'somename', 1: '10.1.1.100', 2: 'aa-bb-cc-dd-ee-ff'},
{0: 'someothername', 1: '10.1.1.12', 2: '11-22-33-44-55-66'}
];

如您所见,该阵列包含服务器名称、IP 地址和 MAC 地址。它是写在这个数组中的一些表格内容。 要对表进行排序,我想对这个数组进行排序。

你有什么巧妙的办法来处理这个问题吗?

感谢您的帮助。

编辑:好吧,也许我必须更具体: 对多维数组进行排序是没有问题的。我可以根据 MA​​C、IP 或名称对这个数组进行排序。这是一个简单的一行代码。 问题是自然地对它们进行排序。当您有服务器名称或 IP 等字母数字字符串时,您希望对示例列表进行排序:

{a3, a12, a100, a1} 

像这样:

{a1, a3, a12, a100} 

这称为自然排序。 而“正常”排序看起来像这样:

{a1, a100, a12, a3}

我找到了几个用于自然排序的算法,但我无法让它们准备好对多维数组进行排序。

【问题讨论】:

  • 如果您提供一个示例案例,我很确定您会在几分钟内得到重复的回复或很多答案。
  • 最好举一个你的数组的例子:)
  • 不要认为它是重复的,因为我需要自然排序。您的示例是正常排序。
  • 首先,这是一个多维数组?它是一个对象数组?

标签: javascript sorting multidimensional-array


【解决方案1】:

根据IP地址以外的属性进行排序似乎很简单。如果你想按照IP地址排序,你可以这样做;

var ipads = ["192.168.1.1", "192.168.0.1", "10.10.1.1", "178.16.62.42", "42.14.1.1", "42.15.1.1", "178.16.61.42", "192.168.1.2", "0.255.255.255","9.255.255.255","10.0.0.1"],
   result = ipads.map(a => a.split("."))
                 .sort((a,b) => (a[0]-b[0])*16777216 + (a[1]-b[1])*65536 + (a[2]-b[2])*256 + a[3]-b[3])
                 .map(e => e.join("."));
console.log(result);

如果您想按属性的优先级排序,那么 SO 中有 many answers,您可以应用它。

【讨论】:

  • 谢谢,但这无济于事。我在原帖中详细说明了我的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
相关资源
最近更新 更多