Eu quero percorrer os objetos contidos em uma matriz e alterar as propriedades de cada um. Se eu fizer isso:
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j]);
}
O console deve exibir todos os objetos da matriz, certo? Mas, na verdade, ele exibe apenas o primeiro objeto. se eu consolar o log fora do loop, todos os objetos aparecerão, de modo que definitivamente haverá mais.
Enfim, aqui está o próximo problema. Como acesso, por exemplo, Object1.x na matriz, usando o loop?
for (var j = 0; j < myArray.length; j++){
console.log(myArray[j.x]);
}
Isso retorna "indefinido". Novamente, o log do console fora do loop diz que todos os objetos têm valores para "x". Como faço para acessar essas propriedades no loop?
Em outros lugares, fui recomendado o uso de matrizes separadas para cada uma das propriedades, mas quero garantir que eu tenha esgotado essa avenida primeiro.
Obrigado!
fonte
j
é um número Você o definiu na parte superior do seu loop.myArray
não seja realmente apenas uma matriz, afinal?#forEach
trabalho. Mas a questão era sobre loop.Respostas:
Use forEach é uma função de matriz interna.
Array.forEach()
:fonte
forEach
não seja suportado no IE 9. Não me culpe! O produto do meu empregador dá suporte a isso!yourArray
algo assim,document.getElementsByClassName
seria uma HTMLCollection, não uma matriz. Então essa pergunta pode ser útil.forEach
está bloqueando e não suportaawait
. Ofor...of
loop será.Alguns casos de uso de loop através de uma matriz da maneira de programação funcional em JavaScript:
1. Basta percorrer uma matriz
Nota: Array.prototype.forEach () não é uma maneira funcional, estritamente falando, pois a função que assume como parâmetro de entrada não deve retornar um valor, que, portanto, não pode ser considerado como uma função pura.
2. Verifique se algum dos elementos de uma matriz passa em um teste
3. Transforme em uma nova matriz
Nota: O método map () cria uma nova matriz com os resultados da chamada de uma função fornecida em todos os elementos da matriz de chamada.
4. Resuma uma propriedade específica e calcule sua média
5. Crie uma nova matriz com base no original, mas sem modificá-lo
6. Conte o número de cada categoria
7. Recupere um subconjunto de uma matriz com base em critérios específicos
Nota: O método filter () cria uma nova matriz com todos os elementos que passam no teste implementado pela função fornecida.
8. Classifique uma matriz
9. Encontre um elemento em uma matriz
O método Array.prototype.find () retorna o valor do primeiro elemento na matriz que satisfaz a função de teste fornecida.
Referências
fonte
const people = [ {name: "john", age:23}, {name: "john", age:43}, {name: "jim", age:101}, {name: "bob", age:67} ]; const sortByAge = people.map(p => { console.log(p.name) return p }).sort(function (p1, p2) { return p1.age - p2.age; }); console.log(sortByAge);
Você pode usar um loop for..of para fazer loop sobre uma matriz de objetos.
Uma das melhores coisas dos
for..of
loops é que eles podem iterar mais do que apenas matrizes. Você pode iterar sobre qualquer tipo de iterável, incluindo mapas e objetos. Certifique-se de usar um transpiler ou algo como TypeScript se precisar oferecer suporte a navegadores mais antigos.Se você deseja iterar sobre um mapa, a sintaxe é basicamente a mesma que a anterior, exceto que lida com a chave e o valor.
Eu uso
for..of
loops para praticamente todo tipo de iteração que faço em Javascript. Além disso, uma das coisas mais legais é que eles também trabalham com async / waitit.fonte
fonte
Aqui está um exemplo de como você pode fazê-lo :)
fonte
track
propriedade para cada elemento e atribuiria a uma variável para usar ou interpolar em outra parte do código?Fazer um loop através de uma matriz de objetos é uma funcionalidade bastante fundamental. Isto é o que funciona para mim.
fonte
myArray[j.x]
está logicamente incorreto.Use em
(myArray[j].x);
vez dissofonte
É realmente simples usar o método forEach desde o ES5 +. Você pode alterar diretamente cada propriedade de cada objeto em sua matriz.
Se você deseja acessar uma propriedade específica em cada objeto:
fonte
Aqui está outra maneira de iterar através de uma matriz de objetos (você precisa incluir a biblioteca jQuery no seu documento para isso).
fonte
$.each
métodoIsso funcionaria. Looping array completo (yourArray). Em seguida, faça um loop pelas propriedades diretas de cada objeto (eachObj).
fonte
Iteração de objeto de matriz, usando jQuery, (use o segundo parâmetro para imprimir a sequência).
fonte
Essa é uma das maneiras pelas quais consegui alcançá-lo.
fonte
A resposta aceita usa a função normal. Então, postando o mesmo código com pequenas modificações usando a função de seta no forEach
Também em $ .each você pode usar a função de seta como abaixo
fonte
Cuidado com as costas Carrapatos (`)
fonte
Isso pode ajudar alguém. Talvez seja um bug no Node.
Isso não funciona:
Mas isso funciona ...
Isso funciona também ...
MAS simplesmente reverter a ordem não funciona. Acho que há algum tipo de otimização interna aqui que quebra o Node.
O erro diz que a matriz é indefinida, mas não é: - / Node v11.15.0
fonte