【发布时间】:2013-12-05 02:10:30
【问题描述】:
我正在尝试订购一个我从 JSON “转换”的对象。 我正在尝试使用我在 this question 上找到的这个功能,但它似乎不适用于我的情况:
function sortJsonArrayByProperty(objArray, prop, direction){
if (arguments.length<2) throw new Error("sortJsonArrayByProp requires 2 arguments");
var direct = arguments.length>2 ? arguments[2] : 1; //Default to ascending
if (objArray && objArray.constructor===Array){
var propPath = (prop.constructor===Array) ? prop : prop.split(".");
objArray.sort(function(a,b){
for (var p in propPath){
if (a[propPath[p]] && b[propPath[p]]){
a = a[propPath[p]];
b = b[propPath[p]];
}
}
// convert numeric strings to integers
a = a.match(/^\d+$/) ? +a : a;
b = b.match(/^\d+$/) ? +b : b;
return ( (a < b) ? -1*direct : ((a > b) ? 1*direct : 0) );
});
}
}
这是我的JsFiddle
我想用 3 种不同的方式对其进行排序:
- 按时间顺序按字典(使用“时间”字段)
- 按字母顺序按字典(使用“术语”字段“)
- 全部按时间顺序(忽略字典分隔)
如果这个对象不是那么嵌套,我会知道该怎么做。我可以调整那个功能吗?
【问题讨论】:
-
不是将整个对象传递给
sortJsonArrayByProperty,而是独立传递每个terms数组。仅用于最后一种方式,您必须合并两个数组。 -
请备份,而不是发布您找到并尝试过的一段代码,描述您实际尝试解决的问题。向我们展示您的数据是什么样的,以及您希望排序后的输出是什么样的。这是我们能够正确帮助您的唯一方法。而且,请在您的实际问题中发布该信息,而不是在 jsFiddle 中。在查看 jsFiddle 中的数据时,由于其中有多个数组,因此不清楚您想要排序的确切内容。
-
小提琴中有一个obj的副本。
-
@Andy - 完全不清楚他们想要输出的样子。 jsFiddle 中有多个数组。例如,有多个
terms数组。此外,问题应该独立存在,而无需查看 jsFiddle 即可理解问题的含义。 -
是的,还没有意识到 obj 是如何嵌套的......
标签: javascript sorting