我希望按数组排序值
例如
var objName = [{id:1, name:"one"},{id:2, name:"two"}, {id:3, name:"three"}];
var sortById = [1,3,2];
我想按此顺序输出
1 one
3 three
2 two
答案 0 :(得分:2)
将objName
元素填充到由id
索引的哈希(即对象)中,然后将map
sortById
数组填充到哈希值上。
确切的代码留给读者练习。
答案 1 :(得分:0)
sorted=new Array()
for(var id_index=0;id_index<sortById.length;id_index++)
{
for(var obj_index=0;obj_index<objName.length;obj_index++){
if (objName[obj_index].id===sortById[id_index]) sorted.push(objName[obj_index])
}
}
//now sorted is the new sorted array. if you want to overwrite the original object:
objName=sorted;
答案 2 :(得分:0)
假设两个数组的长度相同,您可以先创建一个哈希:
var objName = [{id:1, name:"one"},{id:2, name:"two"}, {id:3, name:"three"}];
var myHash = {};
for(var i = 0; i<objName.length;i++){
myHash[objName[i].id] = objName[i];
}
获得此哈希后,您可以遍历您的密钥数组并获取值:
var sortById = [1,3,2];
var sortedArray = [];
for(var i = 0; i<sortById.length;i++){
sortedArray.push(myHash[sortById[i]]);
}
答案 3 :(得分:0)
清晰可读(主观,可能不适合所有人):
var result = [];
sortById.forEach(function(id) {
result = result.concat(objName.filter(function(i) {
return i.id == id;
}));
});
JSFiddle:http://jsfiddle.net/RLH6F/
实施只是为了好玩。
警告:O(n^2)