jquery json . 排序数据数组自定义列表 . 如何?



我想按数组对值进行排序 另一个

例如

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

objName元素填充到由id索引的哈希(即对象)中,然后将sortById数组map到哈希值上。

留给读者的精确代码作为练习。

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;

假设两个数组的长度相同,您可以先创建一个哈希:

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]]);
}

清晰易读的东西(主观的,可能并不适合所有人):

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)

PS:我同意最好在没有代码的情况下提供食谱,但是一旦已经有社区成员提供了复制粘贴解决方案ы我决定至少提供一个好看的解决方案。

最新更新