Opções suspensas de Javascript 0-100 incremento por 0,5

Eu tenho uma função JavaScript que está criando os valores para uma lista suspensa na minha página. Atualmente estou incrementando em 5, (0-100).

Eu estou tentando mudar isso para incrementar por .5 em vez disso, mas ele continua retornando 0-100 sem incremento.

Minha saída esperada é 0, .5,1,1,5,2,2,5 ... 100 .

Aqui está minha função até agora:

/**
 * Generate our possible error scores
 */
function generateErrorScores() {

    var min = 0,
        max = 100,
        multiplier = 5,//Tried .5 here
        list = [];

   //Loop between min and max, increment by multiplier
    for (var i = min; i <= max; i++) {
        if (i % multiplier === 0) {
            list.push(i);
        }
    }

    return list;
}

console.log(generateErrorScores())

Fiddle: http://jsfiddle.net/3y451jga/

Tenho a sensação de que o seu if (i% multiplicate === 0) { está causando o problema, mas não tenho certeza de como adaptá-lo aos incrementos de .5 .

1
Por que não apenas fazer para (var i = min; i <= max; i + = multiplicador) ???
adicionado o autor Niet the Dark Absol, fonte
Alterar i ++ para i + = 0.5 pode ser incrementado em 0.5.
adicionado o autor Amy, fonte
Por que você simplesmente não incrementa pelo multiplicador? .. jsfiddle.net/3y451jga/2 esquisito. Quer dizer, há alguma razão pela qual você está usando o módulo aqui?
adicionado o autor briosheje, fonte

6 Respostas

O if (i% multiplicier === 0) não serve para nada. Isso funciona se você precisar de multiplicadores de uma lista, mas nesse caso você precisa de frações.

Curiosamente, seu comentário está correto ("incremento por multiplicador"), mas o código não está fazendo isso. Uma solução válida seria algo assim:

function generateErrorScores() {

    var min = 0,
        max = 100,
        segment = .5,
        list = [];

   //Loop between min and max, increment by segment
    for (var i = min; i <= max; i += segment) {
        list.push(i);
    }

    return list;
}

console.log(generateErrorScores())
1
adicionado

Se tudo que você quer é a lista [0, 0.5, 1, 1.5, ..., 100] você poderia fazer:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

/**
 * Generate our possible error scores
 */
function generateErrorScores() {
  const multiplier = 0.5
  return [...Array((100/multiplier) + 1)].map((x, i) => i * multiplier)
}

console.log(generateErrorScores())
</div> </div>
1
adicionado

você pode apenas criar o i por 0.5 e você obterá a saída esperada, não há necessidade de verificação adicional aqui.

 for (var i = min; i <= max; i+=0.5) {

<div class="snippet" data-lang="js" data-hide="true" data-console="true" data-babel="false"> <div class="snippet-code snippet-currently-hidden">

/**
 * Generate our possible error scores
 */
function generateErrorScores() {
  var min = 0,
    max = 100,
    multiplier = 0.5,
    list = [];
 //Loop between min and max, increment by multiplier
  for (var i = min; i <= max; i += 0.5) {
    list.push(i);
  }
  return list;
}
console.log(generateErrorScores())
</div> </div>
0
adicionado

Por que você está multiplicando e não adicionando?

0
adicionado
Por favor, não deixe comentários como respostas, você pode comentar assim que ganhar o suficiente
adicionado o autor Huangism, fonte
Este deve ser um comentário e não uma resposta.
adicionado o autor Yury Tarabanko, fonte
Eu não estou criticando, mas parece que se você quiser aumentar em 0.5 cada vez que você adicionar.
adicionado o autor Greg, fonte

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

function generateErrorScores() {

        var min = 0,
                max = 100,
                increment = 0.5,
                list = [];

        // Loop between min and max, increment by multiplier
        for (var i = min; i <= max; i = i + increment) {
                list.push(i);
        }

        return list;

}

console.log(generateErrorScores());
</div> </div>
0
adicionado

Eu acho que seria mais fácil apenas fazer isso

for (var i = min; i <= max; i+=0.5) {
    list.push(i);
}
0
adicionado
JavaScript Brasil OFICIAL
JavaScript Brasil OFICIAL
4 138 dos participantes

Grupo sobre JavaScript do Brasil