<p>большинство из этих ответов слишком усложняют проблему или используют jquery или underscore, тогда как op никогда не просил об этом.</p><p>вы можете преобразовать объект в массив следующим образом:</p><pre><code>myarray= object.keys(data).map(function(key) { return data[key] }); </code></pre><p>и отсортировать результат так:</p><pre><code>myarray.sort(function(x, y) {return x.level - y.level}); </code></pre><p>если вам нужен идентификатор/индекс, то вам нужно сделать немного больше:</p><pre><code>object.keys(data).map(function(key) { var obj = data[key]; obj.index = key; return obj }); </code></pre>

<p>недавно я столкнулся с этой проблемой, пытаясь сгруппировать массив объектов по одному из его свойств, в результате чего я не смог отсортировать один объект. </p><p>конкретно это массив постов в блоге, которые я хотел сгруппировать по годам и отсортировать по убыванию. я использовал утилиту подчеркивания:</p><pre><code>var grouped = \_.groupby(blogposts, function(post){ var date = new date(post.publication\_date) return date.getfullyear() }) //=> { 2010: [blogpost, blogpost,etc], 2011: [blogpost, etc] } </code></pre><p>как объяснил @raynos, я должен был получить какой-то массив перед тем, как его отсортировать ... </p><p>оказывается, в underscore (1.4) есть небольшая полезная утилита <code>pairs</code>, которая отобразит {key: value} вашего объекта в массив [key, value]. эквивалент:</p><pre><code>var paired = \_.map(grouped, function(val, key){ return [key, val] }) //=> [ [2010, [blogpost, blogpost, ...] ], [2011, [blogpost, blogpost, ...]]...] </code></pre><p>оттуда вы можете легко отсортировать по первому члену каждой пары. </p><p>вот конечный результат:</p><pre><code>var grouped = \_.groupby(result.resource, function(resource){ var date = new date(resource.pub\_date) return date.getfullyear() //+ "." + (date.getmonth()+1) }) var paired = \_.pairs(grouped) var sorted = \_.sortby(paired, function(pairs){ return -parseint(pairs[0]) }) return sorted; // giving me the expected result: //=> [ [2013, [blogpost, blogpost, ...] ], [2012, [blogpost, blogpost, ...]]...] </code></pre><p>я уверен, что есть лучший и более производительный способ, но из ruby этот код сразу понятен для меня.</p>

<p>jquery предлагает функцию map, которая будет перебирать каждый элемент в массиве или объекте и отображать результаты в новый массив. </p><p>до версии jquery 1.6 $ .map () поддерживал только массивы обхода.мы можем использовать это для преобразования любого объекта в массив следующим образом ... myarray = $.map(myobject, function (el) { return el; }); </code></pre><p>но ... если функция обратного вызова возвращает <strong>null или undefined</strong>, то это значение <strong>удалено</strong> из массива, в большинстве случаев это полезно, но может вызвать проблемы, если вам нужны нулевые значения в моем массиве.</p><p>jquery предлагает решение для этого .... возвращать значение в виде массива с одним значением</p><pre><code>myarraywithnulls = jquery.map(myobject, function (el) { return [el]; }); </code></pre><p>вот скрипка, демонстрирующая два подхода: <a href="http://jsfiddle.net/chim/nfype/">http://jsfiddle.net/chim/nfype/</a> </p><p> <a href="http://jsperf.com/object-to-array-jquery-2">http://jsperf.com/object-to-array-jquery-2</a> </p>

<p>я написал небольшую функцию для рекурсивного преобразования объекта со свойствами, которые также могут быть объектами, в многомерный массив. этот код зависит от подчеркивания или lodash для методов foreach и toarray.</p><pre><code>function deeptoarray(obj) { var copy = []; var i = 0; if (obj.constructor == object || obj.constructor == array) { \_.foreach(obj, process); } else { copy = obj; } function process(current, index, collection) { var processed = null; if (current.constructor != object && current.constructor != array) { processed = current; } else { processed = deeptoarray(\_.toarray(current)); } copy.push(processed); } return copy; } </code></pre><p>вот скрипка: <a href="http://jsfiddle.net/ggt2d/">http://jsfiddle.net/ggt2d/</a> </p><p>примечание: это было написано для преобразования объекта, который изначально был массивом, обратно в массив, поэтому любые значения ключа индекса не из массива будут потеряны.</p>