当第二个数组是第一个数组中的键时,基于另一个数组对一个数组进行排序。 假设我有一个如下所示的主阵列:
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"的出现顺序对主数组进行排序的最佳方法是什么?在第二个阵列?
答案 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));