Dav*_*ing 6 javascript arrays sorting
可能重复:
JavaScript - 基于另一个整数数组对数组进行
排序Javascript - 基于另一个数组排序数组
如果我有这样的数组:
['one','four','two']
Run Code Online (Sandbox Code Playgroud)
而另一个数组如下:
[{
key: 'one'
},{
key: 'two'
},{
key: 'four'
}]
Run Code Online (Sandbox Code Playgroud)
我如何对第二个数组进行排序,使其key属性遵循第一个数组的顺序?在这种情况下,我想:
[{
key: 'one'
},{
key: 'four'
},{
key: 'two'
}]
Run Code Online (Sandbox Code Playgroud)
我们可以使用sort()函数来执行此操作,方法是将自定义函数传递给它进行比较.此函数必须返回给定a或b比较的3个可能值:
return -1如果a索引低于b
return 0如果a被认为是等于b
return 1如果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;
}
}
Run Code Online (Sandbox Code Playgroud)
此函数将接收您在数组中定义的对象,并查找该arr数组中的值,即您要比较的数组.然后它比较索引,并根据需要返回值.
我们通过将函数传递给函数来使用此函数sort():
testArray.sort(sortFunction)
testArray您要尝试排序的数组在哪里.
你可以看看这里,我做了这个例子,你可以在调用sort函数之前和之后看到数组中的第二个对象被"警告". http://jsfiddle.net/Sqys7/
这是我的看法:
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));
}
Run Code Online (Sandbox Code Playgroud)
示例实现:
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'}];
Run Code Online (Sandbox Code Playgroud)
通常的小提琴: http: //jsfiddle.net/joplomacedo/haqFH/
| 归档时间: |
|
| 查看次数: |
5861 次 |
| 最近记录: |