当第二个数组是第一个数组中的键时,根据另一个数组对一个数组进行排序。

时间:2018-05-31 00:40:49

标签: javascript arrays sorting

当第二个数组是第一个数组中的键时,基于另一个数组对一个数组进行排序。 假设我有一个如下所示的主阵列:

let mainArray = [{ "id": 24443, "name": "Apple" }, { "id": 20172, "name": "Banana" }, { "id": 187016, "name": "Cherry" }, { "id": 217632, "name": "Guava" }, { "id": 5221, "name": "Peach" }, { "id": 97568, "name": "Strawberry" }]

我的id数组如下:

let idArray = [ "24443", "20172", "5221", "187016", "217632", "97568" ]

请注意,第二个数组包含的值是" id"第一个数组中的属性。

根据" key"的出现顺序对主数组进行排序的最佳方法是什么?在第二个阵列?

2 个答案:

答案 0 :(得分:1)

如果你不是绝对的表现,这是一个简单的方法:

mainArray.sort( (a,b) => idArray.indexOf(a.id.toString()) - idArray.indexOf(b.id.toString()));

或者对于线性算法(仅解析两个向量):

// Array to Map
let map = mainArray.reduce( (acc, {id,name}) => Object.assign(acc, {[id] : name}), {});
idArray.map( id => ({id, name: map[id]}) )

答案 1 :(得分:0)

我创建了一个可以进行地图和排序的函数: 此函数将映射键数组并在mainArray中找到该键并将其返回。



var mapAndSort = (mainArr, indexArr, key) => {
    if (mainArr.length != indexArr.length) {
        return null;
    }
    return indexArr.map(val => {
        return mainArr.find(c => c[key] == val);
    });
}
var mainArray = [{ "id": 24443, "name": "Apple" }, { "id": 20172, "name": "Banana" }, { "id": 187016, "name": "Cherry" }, { "id": 217632, "name": "Guava" }, { "id": 5221, "name": "Peach" }, { "id": 97568, "name": "Strawberry" }];


var idArray = [  "20172","24443", "5221",  "217632", "97568", "187016"];

var result = mapAndSort(mainArray, idArray, 'id');

document.write(JSON.stringify(result));