2014-01-24 3 views
0

Я хочу значения сортировки по массиву Другой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 
+2

Можем ли мы увидеть ваши неудачные попытки? – undefined

ответ

2

Материал элементов в хэш (т.е. объект) индексируются id, затем map массив sortById на значения хэша.

Точный код оставлен как упражнение для чтения.

+1

Идеальный ответ на данный вопрос по моему скромному мнению. Хотел бы я еще +1 +1 – zerkms

+0

Надеюсь, вы не ответите ни на один из моих вопросов ... –

+2

@Nick Manning: вы путаете учебный процесс с финансированием толпы. – zerkms

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; 
+0

Подсказка: '.filter()' – zerkms

+1

Не получится, он хочет сортировать по id. Кто сказал, что идентификаторы находятся в правильном порядке в первом массиве? – Kenneth

+0

Мой плохой, ты прав. – Kenneth

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

PS: Я согласен, что было бы лучше просто дать рецепт без кода, но как только там уже являются членами сообщества при условии, что копировать-вставить solutionы я решил обеспечить по крайней мере хороший один.

Смежные вопросы