Existe uma maneira em Javascript de escrever algo assim facilmente:
[1,2,3].times do {
something();
}
Qualquer biblioteca que possa suportar alguma sintaxe semelhante, talvez?
Atualização: para esclarecer - gostaria something()
de ser chamado 1,2 e 3 vezes, respectivamente, para cada iteração de elemento do array
javascript
jquery
underscore.js
BreakPhreak
fonte
fonte
Respostas:
Esta resposta é baseada
Array.forEach
, sem qualquer biblioteca, apenas baunilha nativa .Para ligar basicamente
something()
3 vezes, use:considerando a seguinte função:
O outpout será
Para responder a essas perguntas, aqui está uma maneira de ligar
something()
1, 2 e 3 vezes, respectivamente:É 2017, você pode usar o ES6:
ou no bom e velho ES5:
Em ambos os casos, o outpout será
O outpout será
(uma, depois duas e três vezes)
fonte
something
é chamado apenas 3 vezes, ele deve ser chamado 6 vezes.[...Array(i)]
ouArray(i).fill()
, dependendo de suas necessidades para os índices reais..forEach(something)
Basta usar um loop:
fonte
Possível alternativa ES6.
E, se você quiser "ser chamado 1,2 e 3 vezes, respectivamente".
Atualizar:
Retirado de fill-arrays-with-undefined
Esta parece ser uma maneira mais otimizada de criar o array inicial, também atualizei para usar a segunda função de mapa de parâmetro sugerida por @felix-eve.
fonte
Array.from(Array(3)).forEach(something)
Array.from()
tem um segundo parâmetro opcionalmapFn
, que permite executar uma função de mapa em cada elemento da matriz, portanto, não há necessidade de usar forEach. Você pode simplesmente fazer:Array.from({length: 3}, () => somthing() )
Já que você mencionou o sublinhado:
Supondo que
f
seja a função que você deseja chamar:vai fazer o truque. Por exemplo, com
f = function (x) { console.log(x); }
, você obterá em seu console:0 0 1 0 1 2
fonte
_(3).times(function(n){return n;});
deve fazer o truque. Veja a documentação aqui.Com lodash :
Ou se você quiser fazer algo N vezes :
Consulte este link para
lodash
instalaçãofonte
Crie um Array e
fill
todos os itens comundefined
essemap
método podem funcionar:Usando o loop de reverências da velha guarda:
fonte
Você também pode fazer a mesma coisa com a desestruturação da seguinte forma
ou se você precisa de índice
fonte
Se você não pode usar Underscorejs, você mesmo pode implementá-lo. Ao anexar novos métodos aos protótipos Number e String, você poderia fazer assim (usando as funções de seta ES6):
Você simplesmente precisa criar uma expressão de função (de qualquer nome) e atribuí-la a qualquer nome de propriedade (nos protótipos) que você gostaria de acessá-la como:
fonte
Existe uma biblioteca fantástica chamada Ramda, que é semelhante a Underscore e Lodash, mas é mais poderosa.
Ramda contém muitas funções úteis. Veja a documentação Ramda
fonte
Você pode usar o comprimento da matriz para executar o número de vezes que sua tarefa.
ou
fonte
você pode usar
Array.forEach
exemplo:
ou com jQuery
http://api.jquery.com/jQuery.each/
fonte
forEach
só é compatível com o IE a partir da versão 9: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…Você pode chamá-lo assim:
fonte
e
ou (via https://stackoverflow.com/a/20066663/275501 )
fonte
Usando jQuery
.each()
OU
EDITAR
Você pode fazer o seguinte com JS puro:
fonte
Basta usar um loop aninhado (talvez incluído em uma função)
Então chame assim:
fonte
Essas respostas estão todas boas e bem e IMO @Andreas é o melhor, mas muitas vezes em JS temos que fazer as coisas de forma assíncrona, nesse caso, assíncrono já cobre:
http://caolan.github.io/async/docs.html#times
Esses recursos de 'tempos' não são muito úteis para a maioria dos códigos de aplicativos, mas devem ser úteis para testes.
fonte
fonte
Dada uma função
something
:E um novo método
times
adicionado aoArray
protótipo:Este código:
Produz isto:
O que eu acho que responde à sua pergunta atualizada (5 anos depois), mas eu me pergunto o quão útil é ter este trabalho em um array? O efeito não seria o mesmo que chamar
[6].times(something)
, que por sua vez poderia ser escrito como:(embora o uso de
_
como uma variável lixo provavelmente irá prejudicar o lodash ou sublinhado se você estiver usando)fonte
let
como emfor (let _ of Array(6)) something()
para evitar o derrame de lodash fora do por pelo menos.Array.from (ES6)
Use-o assim:
Ou
Ou
fonte
Usando
Array.from
e.forEach
.fonte
Supondo que possamos usar alguma sintaxe ES6 como o operador spread, vamos querer fazer algo tantas vezes quanto a soma de todos os números na coleção.
Neste caso, se times for igual a
[1,2,3]
, o número total de vezes será 6, ou seja, 1 + 2 + 3.Esta postagem deve ser útil se a lógica por trás da construção e disseminação de um array não for aparente.
fonte
Implementação de TypeScript:
Para aqueles que estão interessados em como implementar
String.times
eNumber.times
de uma forma que seja segura para o tipo e funcione com othisArg
, aqui está:Um link para o Playground TypeScript com alguns exemplos pode ser encontrado aqui
Esta postagem implementa soluções postadas por: Andreas Bergström , vinyll , Ozay Duman , & SeregPie
fonte