Suponha que você tenha um objeto Javascript como {'cat': 'meow', 'dog': 'woof' ...} Existe uma maneira mais concisa de escolher uma propriedade aleatória do objeto do que esta maneira prolixa que criei :
function pickRandomProperty(obj) {
var prop, len = 0, randomPos, pos = 0;
for (prop in obj) {
if (obj.hasOwnProperty(prop)) {
len += 1;
}
}
randomPos = Math.floor(Math.random() * len);
for (prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (pos === randomPos) {
return prop;
}
pos += 1;
}
}
}
javascript
Bemmu
fonte
fonte
Respostas:
A resposta escolhida funcionará bem. No entanto, esta resposta será executada mais rapidamente:
fonte
Math.random()
retorna um número no intervalo [0,1).Escolher um elemento aleatório de um fluxo
fonte
Não achei que nenhum dos exemplos fosse confuso o suficiente, então aqui está um exemplo muito difícil de ler fazendo a mesma coisa.
Edit: Você provavelmente não deve fazer isso a menos que queira que seus colegas de trabalho o odeiem.
Explicação:
Mão longa, menos confusa:
fonte
Você pode simplesmente construir um array de chaves enquanto caminha pelo objeto.
Em seguida, escolha aleatoriamente um elemento das chaves:
fonte
var keys = Object.keys(obj)
<< 0
a um número inteiro não fará nada.parseInt()
fará o mesmo trabalho. Portanto, nada a aprender aqui, exceto escrever um código menos compreensível.Se você for capaz de usar bibliotecas, poderá descobrir que a biblioteca JS do Lo-Dash tem vários métodos muito úteis para tais casos. Nesse caso, vá em frente e verifique
_.sample()
.(Observe que a convenção Lo-Dash está nomeando o objeto de biblioteca _. Não se esqueça de verificar a instalação na mesma página para configurá-la para seu projeto.)
No seu caso, vá em frente e use:
fonte
Se estiver usando o underscore.js, você pode fazer:
Extra:
Se você precisar de várias propriedades aleatórias, adicione um número:
Se você precisar de um novo objeto apenas com essas propriedades aleatórias:
fonte
Outra maneira simples de fazer isso seria definir uma função que aplique a
Math.random()
função.Esta função retorna um inteiro aleatório que varia de 'min'
Em seguida, extraia uma 'chave' ou um 'valor' ou 'ambos' de seu objeto Javascript sempre que fornecer a função acima como um parâmetro.
fonte
getRandomArbitrary
geraria um novo número aleatório cada vez que fosse chamada.Em um objeto JSON, você deve colocar isto:
Essa função retornará o interior de uma propriedade aleatória.
fonte
Você pode usar o seguinte código para escolher uma propriedade aleatória de um objeto JavaScript:
fonte