排序包含基于另一个数组的对象的数组

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)

Mys*_*cXG 6

我们可以使用sort()函数来执行此操作,方法是将自定义函数传递给它进行比较.此函数必须返回给定ab比较的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/


ban*_*aka 4

这是我的看法:

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/

  • 不过,使用排序功能可能是更好的方法。 (2认同)