Javascript 根据另一个数组对数组进行排序
我有两个数组,主数组包含大约300个值:Javascript 根据另一个数组对数组进行排序,javascript,sorting,Javascript,Sorting,我有两个数组,主数组包含大约300个值: var main = [ 182, 928, 192, 111, 493, 1100, 3 ] .. 次要值包括10个值,但每个值都是一个数组: var secondary = [{"id" : 3, "category" : "animals"}, {"id" : 111, "category" : "water"}] .. 我的问题是如何根据主数组中的值按id对次数组进行排序?如果您按照所述构造第二个数组,则可以使用以下代码。 该解决方案使用in
var main = [ 182, 928, 192, 111, 493, 1100, 3 ] ..
次要值包括10个值,但每个值都是一个数组:
var secondary = [{"id" : 3, "category" : "animals"}, {"id" : 111, "category" : "water"}] ..
我的问题是如何根据主数组中的值按id对次数组进行排序?如果您按照所述构造第二个数组,则可以使用以下代码。 该解决方案使用indexOf,这可能不是所有浏览器中都存在的。Mozilla提供了indexOf的实现
首先,为
main
数组创建某种反向索引:
var main_map = {};
for(var i = main.length;i--; ) {
main_map[main[i]] = i;
}
然后可以传递自定义排序函数,如下所示:
secondary.sort(function(a, b) {
return main_map[a["id"]] - main_map[b["id"]];
});
或者,您可以为
secondary
数组创建一个反向索引,并在main
数组上循环,但由于secondary
数组小得多,因此效率较低。将对象视为数组。次要的应该是这样的:var secondary=[{“id”:3,“category”:“animals”},{“id”:111,“category”:“water”}];我不懂javascript,所以我不能给你一个答案,但请澄清:你想按id排序,还是按第一个数组中的值排序,还是按第一个数组中id的顺序排序?@fusion-你说得对。这不是一个对象,我的错。@ymett-根据id在第一个数组中的顺序。哎呀。。。。它不是重复的…那是PHP…请注意,每次比较调用indexOf
都非常慢。
secondary.sort(function(a, b) {
return main_map[a["id"]] - main_map[b["id"]];
});