Мое приложение создает объект JavaScript, как показано ниже:
myObj= {1:[Array-Data], 2:[Array-Data]}
Но мне нужен этот объект как массив.
array[1]:[Array-Data]
array[2]:[Array-Data]
Поэтому я попытался преобразовать этот объект в массив, $.each
перебирая объект и добавляя элемент в массив:
x=[]
$.each(myObj, function(i,n) {
x.push(n);});
Есть ли лучший способ преобразовать объект в массив или, возможно, функцию?
javascript
jquery
arrays
object
Бндр
источник
источник
myObj= {1:[Array-Data]
наmyObj= {0:[Array-Data]
не было частью вашего редактирования (как я помню, правильно)Ответы:
Вывод:
источник
$.map
? Каждый поиск, который я пытаюсь выполнить, просто вызывает множество ссылок на jQuery или метод карт для массивов.value.key = index; return [value];
вместоreturn [value];
Если вы ищете функциональный подход:
Результаты в:
То же самое с функцией стрелки ES6:
С ES7 вы сможете использовать
Object.values
вместо этого ( дополнительная информация ):Или, если вы уже используете Underscore / Lo-Dash:
источник
Я думаю, что вы можете использовать,
for in
но проверка, если свойство не наследуетсяРЕДАКТИРОВАТЬ - если вы хотите, вы также можете сохранить индексы вашего объекта, но вы должны проверить, являются ли они числовыми (и вы получите неопределенные значения для отсутствующих индексов:
источник
$.map
сгладитArray-Data
.[{1:[Array-Data], 2:[Array-Data]}]
и$.map()
также не выглядит успешным. Это показывает, что все данные Sub-Array объединяются в один массив.array.length
должен вернуть 2 (потому что существует 2 элемента), но он возвращает 67, что является числом всех элементов во всех ["Array-Data"].arr[+i] = myObj[i];
потому что (i)for(...in...)
не гарантированно возвращать свойства в любом порядке (ii) в примере OP свойства начинаются с 1, а не с 0.Просто делай
Это все!
источник
Если вам известен максимальный индекс в вашем объекте, вы можете сделать следующее:
источник
myObj.length = Object.keys(myObj).length
Поскольку ES5 Object.keys () возвращает массив, содержащий свойства, определенные непосредственно для объекта (за исключением свойств, определенных в цепочке прототипов):
ES6 делает еще один шаг вперед благодаря функциям стрелок:
источник
В настоящее время существует простой способ сделать это: Object.values () .
Вывод:
Для этого не требуется jQuery, он определен в ECMAScript 2017.
Он поддерживается всеми современными браузерами (забудьте IE).
источник
var state = { ingredient: { salad: 1, bacon: 1, } }
а затемvar HariOm = Object.values(state);
следуетconsole.log(typeof HariOM)
тип отображает как объект. Разве это не должно отображать это как массив?Array.isArray(HariOM)
Лучшим методом будет использование функции javascript -only:
источник
var myObj = {1:[1,2,3],2:[4,5,6]};
источник
var bbb = {'1': 'a', '3': 'b'}; var x = []; for (var i in bbb) { x[parseInt(i)] = bbb[i];} console.log(x);
ECMASCRIPT 5:
ECMASCRIPT 2015 или ES6:
источник
Как насчет
jQuery.makeArray(obj)
Вот как я это сделал в своем приложении.
источник
Решение очень просто
источник
ES8 легко и просто :
Официальная документация
источник
Fiddle Demo
Расширение до ответа Бьорнда .
Ссылка
Array.prototype.slice ()
Function.prototype.apply ()
Object.prototype.hasOwnProperty ()
Object.keys ()
источник
Если вы хотите сохранить имя свойств объекта в качестве значений. Пример:
Используйте
Object.keys()
,Array.map()
иObject.assign()
:Результат:
Объяснение:
Object.keys()
перечисляет все свойства источника;.map()
применяет=>
функцию к каждому свойству и возвращает массив;Object.assign()
объединяет имя и значение для каждого свойства.источник
Я сделал пользовательскую функцию:
источник
После некоторых тестов вот общий объект для преобразования функций массива:
У вас есть объект:
Функция:
Использование функции:
Ты получаешь:
Итак, вы можете получить все ключи и значения, такие как:
Результат в консоли:
Редактировать:
Или в виде прототипа:
А затем используйте как:
источник
Вы можете создать простую функцию для преобразования из
object
вarray
, что-то вроде этого может сделать работу за вас, используя чистый JavaScript:или этот:
и вызовите и используйте функцию как ниже:
Также в будущем у нас будет нечто, называемое
Object.values(obj)
аналогичным,Object.keys(obj)
которое вернет вам все свойства в виде массива, но пока не поддерживается во многих браузерах ...источник