Meu aplicativo cria um objeto JavaScript, como o seguinte:
myObj= {1:[Array-Data], 2:[Array-Data]}
Mas eu preciso desse objeto como uma matriz.
array[1]:[Array-Data]
array[2]:[Array-Data]
Então, tentei converter esse objeto em uma matriz iterando $.each
através do objeto e adicionando o elemento a uma matriz:
x=[]
$.each(myObj, function(i,n) {
x.push(n);});
Existe uma maneira melhor de converter um objeto em uma matriz ou talvez uma função?
javascript
jquery
arrays
object
The Bndr
fonte
fonte
myObj= {1:[Array-Data]
paramyObj= {0:[Array-Data]
não fazia parte da sua edição (como eu lembro direito)Respostas:
Resultado:
fonte
$.map
? Toda pesquisa que eu tento fazer sobre isso gera muitos links para o jQuery ou o método map de matrizes.value.key = index; return [value];
vez dereturn [value];
Se você está procurando uma abordagem funcional:
Resulta em:
O mesmo com uma função de seta ES6:
Com o ES7, você poderá usar
Object.values
( mais informações ):Ou se você já estiver usando Underscore / Lo-Dash:
fonte
Eu acho que você pode usar,
for in
mas verificando se a propriedade não está inerithedEDIT - se você quiser, também pode manter os índices do seu objeto, mas você deve verificar se eles são numéricos (e obtém valores indefinidos para os índices ausentes:
fonte
$.map
achataráArray-Data
.[{1:[Array-Data], 2:[Array-Data]}]
E$.map()
também não parece bem-sucedido. Parece que todos os dados da Sub-matriz são mesclados em uma matriz.array.length
deve retornar 2 (porque existem 2 elementos), mas retorna 67, que é o número de todos os elementos em todos ["Array-Data"].arr[+i] = myObj[i];
porque (i)for(...in...)
não é garantido para propriedades de retorno em qualquer ordem (ii) no exemplo do OP as propriedades começam a partir de 1, não 0.Simplesmente faça
Isso é tudo!
fonte
Se você souber o índice máximo em seu objeto, poderá fazer o seguinte:
fonte
myObj.length = Object.keys(myObj).length
Como o ES5 Object.keys () retorna uma matriz que contém as propriedades definidas diretamente em um objeto (excluindo propriedades definidas na cadeia de protótipos):
O ES6 dá um passo adiante com as funções de seta:
fonte
Atualmente, existe uma maneira simples de fazer isso: Object.values () .
Resultado:
Isso não requer jQuery, foi definido no ECMAScript 2017.
É suportado por todos os navegadores modernos (esqueça o IE).
fonte
var state = { ingredient: { salad: 1, bacon: 1, } }
e, em seguida,var HariOm = Object.values(state);
seguido porconsole.log(typeof HariOM)
ele exibe o tipo como um objeto. Não deveria exibi-lo como uma matriz?Array.isArray(HariOM)
O melhor método seria usar uma função javascript-only:
fonte
var myObj = {1:[1,2,3],2:[4,5,6]};
fonte
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 ou ES6:
fonte
E se
jQuery.makeArray(obj)
Foi assim que fiz no meu aplicativo.
fonte
A solução é muito simples
fonte
ES8 maneira facilitada :
A documentação oficial
fonte
Fiddle Demo
Extensão para resposta de bjornd .
Referência
Array.prototype.slice ()
Function.prototype.apply ()
Object.prototype.hasOwnProperty ()
Object.keys ()
fonte
Se você deseja manter o nome das propriedades do objeto como valores. Exemplo:
Use
Object.keys()
,Array.map()
eObject.assign()
:Resultado:
Explicação:
Object.keys()
enumera todas as propriedades da fonte;.map()
aplica a=>
função a cada propriedade e retorna uma matriz;Object.assign()
mescla nome e valor para cada propriedade.fonte
Eu criei uma função personalizada:
fonte
Após alguns testes, aqui está um objeto geral para converter o conversor de funções:
Você tem o objeto:
A função:
Uso da função:
Você obtém:
Assim, você pode alcançar todas as chaves e valores como:
Resultado no console:
Editar:
Ou em forma de protótipo:
E então use como:
fonte
Você pode criar uma função simples para fazer a conversão de
object
paraarray
, algo assim pode fazer o trabalho para você usando javascript puro:ou este:
e chame e use a função como abaixo:
Também no futuro, teremos algo chamado
Object.values(obj)
, semelhante aoObject.keys(obj)
qual retornará todas as propriedades para você como uma matriz, mas ainda não é suportado em muitos navegadores ...fonte