Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据另一个数组对数组进行排序_Javascript_Sorting - Fatal编程技术网

Javascript 根据另一个数组对数组进行排序

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

我有两个数组,主数组包含大约300个值:

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"]];
});