2012-11-22 110 views
4

可能重复:
JavaScript - Sort an array based on another array of integers
Javascript - sort array based on another array排序数组

如果我有一个这样的数组:

['one','four','two'] 

而另一个数组像这样:

[{ 
    key: 'one' 
},{ 
    key: 'two' 
},{ 
    key: 'four' 
}] 

如何排序第二个数组,因此它的key属性遵循第一个的顺序?在这种情况下,我想:

[{ 
    key: 'one' 
},{ 
    key: 'four' 
},{ 
    key: 'two' 
}] 
+2

可能重复 - 排序依据的另一个数组的数组整数](http://stackoverflow.com/questions/4046967/javascript-sort-an-array-based-on-another-array-of-integers)和/或[Javascript - 基于另一个数组的排序数组](h TTP://计算器。com/questions/13304543/javascript-sort-array-based-on-another-array?lq = 1) –

+0

@TedHopp不完全,它解决了两个平面数组,但这种情况使用了对象键,这使得更难以有效排序除非你想在每次迭代中搜索第二个)。 – David

+0

我期望这样的工作,但不知何故......它不。 : -/ 'a2.sort(function(a,b){a1 [a2.indexOf(a)] - a1 [a2.indexOf(b)]})' –

回答

2

这是我对此采取:

function orderArray(array_with_order, array_to_order) { 
    var ordered_array = [], 
     len = array_to_order.length, 
     len_copy = len, 
     index, current; 

    for (; len--;) { 
     current = array_to_order[len]; 
     index = array_with_order.indexOf(current.key); 
     ordered_array[index] = current; 
    } 

    //change the array 
    Array.prototype.splice.apply(array_to_order, [0, len_copy].concat(ordered_array)); 
} 

样品实施:

var array_with_order = ['one', 'four', 'two'], 

    array_to_order = [ 
     {key: 'one'}, 
     {key: 'two'}, 
     {key: 'four'} 
    ]; 

orderArray(array_with_order, array_to_order); 

console.log(array_to_order); //logs [{key: 'one'}, {key: 'four'}, {key: 'two'}]; 

通常的小提琴:JavaScript代码http://jsfiddle.net/joplomacedo/haqFH/

+0

+1聪明的使用'indexOf' – David

+1

使用排序功能可能是一个更好的方法来做到这一点。 – banzomaikaka

5

我们可以使用sort()函数通过传递一个自定义函数来完成比较。此函数必须返回给定ab比较3个可能值:如果a被认为等于b

return 1

return -1如果a被索引低于b

return 0如果a被索引大于b

考虑到这一点,我们可以定义一个如下所示的函数:

function sortFunction(a,b){ 
    var indexA = arr.indexOf(a['key']); 
    var indexB = arr.indexOf(b['key']); 
    if(indexA < indexB) { 
     return -1; 
    }else if(indexA > indexB) { 
     return 1; 
    }else{ 
     return 0;  
    } 
} 

该功能将在您的数组中定义的对象,并找到该值是arr阵列,这是你比较在数组中。然后它比较索引,并根据需要返回值。

我们通过传递函数为sort()功能,例如使用此功能:

testArray.sort(sortFunction)

其中testArray是你要排序的数组。

你可以看看这里,我做了这个例子,你可以看到你的数组中的第二个对象在调用排序函数之前和之后被“警告”。 http://jsfiddle.net/Sqys7/

+0

好的,但是'arr'呢?我想根据'arr'命令进行排序。 – David

+1

它正在对arr命令进行排序,在排序功能中,它是从'arr'中取指标,并进行比较。 – MysticXG

+0

完美,我完全忘了排序功能,谢谢分享:) –