2016-06-24 4 views
-1

У меня есть массив с именем "wordsArray", содержит 5000 слов. Я ищу решение для сортировки этого массива на основе «Word». «Id». У нас также есть «Проект». «Id», что не важно в нашем случае. Вот формат JSON массива:Сортировка вложенного массива JSON в Javascript

{ 
    "Word": 
     {"id":"1","project_id":"2"}, 
    "Project": 
     {"id":"2","name":"Web"} 
},{ 
    "Word": 
     {"id":"4","project_id":"2"}, 
    "Project": 
     {"id":"2","name":"Web"} 
},{ 
    "Word": 
     {"id":"2","project_id":"2"}, 
    "Project": 
     {"id":"2","name":"Web"} 
},{ 
    "Word": 
     {"id":"3","project_id":"2"}, 
    "Project": 
     {"id":"2","name":"Web"} 
}; 

После сортировки, это должно быть что-то вроде этого:

{ 
    "Word": 
     {"id":"1","project_id":"2"}, 
    "Project": 
     {"id":"2","name":"Web"} 
},{ 
    "Word": 
     {"id":"2","project_id":"2"}, 
    "Project": 
     {"id":"2","name":"Web"} 
},{ 
    "Word": 
     {"id":"3","project_id":"2"}, 
    "Project": 
     {"id":"2","name":"Web"} 
},{ 
    "Word": 
     {"id":"4","project_id":"2"}, 
    "Project": 
     {"id":"2","name":"Web"} 
}; 

Update:В JavaScript

+0

Звучит как довольно простой вид для выступления на любом языке. –

+0

Вы что-то внедрили? С чем конкретно вы сталкиваетесь? На каком языке вы работаете? –

+0

@KevinB Я пробовал это, но не работал. Мне нужно в JS. 'code' wordsArray.sort (function (a, b) { return a.id - b.id; });' code' –

ответ

-1

Вы имели конкретный язык программирования в виду, что вы хотите выполнить сортировку?

Потому что в C# вы можете загружать каждое «Дерево» в массив и прокручивать каждый индекс, применяя «ранг», который затем можно использовать для реорганизации массива. После того, как индексы массивов упорядочены, вы можете восстановить исходное дерево JSON или использовать отсортированный массив else, где в вашем коде.

Если вы используете веб-язык, как JavaScript, то есть встроенные функции сортировки, которые могут быть использованы в сочетании с пользовательскими функциями для ранжирования как так:

Words.sort(function(a, b) { 
    return parseFloat(a.id) - parseFloat(b.id); 
}); 
-1

У вас есть несколько вложенных объектов, так что вам нужно заглянуть внутрь объекта, хранящегося в Word, чтобы получить свойство id, используемое для сравнения. Это может выглядеть так:

wordsArray.sort(function (a,b) { 
    return parseInt(a.Word.id) - parseInt(b.Word.id);  
}); 
+1

Это не работает, но это один работает: arr.sort ((a, b) => a.Word.id - b.Word.id) –

+2

@MajidNasirinejad Нет никакой функциональной разницы, кроме того, что вы используете синтаксис функции стрелки и не явно разбираете существующее строковое значение к числовым значениям для сравнения. Учитывая, что функции стрелок еще не полностью поддерживаются в браузерах, я бы лучше утверждал свое решение. –