我试图替换数组中的每个第三个元素

时间:2017-06-13 05:35:35

标签: javascript

我试图替换数组中的每个第三个元素,但我的代码不起作用。



 //Calling of the first array
//first array
var numbers = new Array();
var go = true;
while (go) {
  var n = parseFloat(prompt("Number please", ""));
  numbers.push(n);

  go = confirm("One more number?");
}

document.write("<p>" + numbers.toString() + "</p>");

// Array to change elements
// second array
for (var i = 0; i < numbers.length; i++)
  if (numbers[i] % 3 == 0) {
    (numbers *= 2);
  }
else {
  (numbers *= 1);
}
document.write("<p>" + numbers.toString() + "</p>");

//document.write("<p>");
&#13;
&#13;
&#13;

8 个答案:

答案 0 :(得分:2)

numbers[i] % 3更改为i % 3。您目前正在测试数组中的数字是否为3的倍数,而不是它在数组中的位置是3的倍数。

您还需要更改numbers *= 2之类的语句。 numbers是一个数组,所以乘以它不会很好。如果要更新应为numbers[i] *= 2;

的单个数组条目

答案 1 :(得分:1)

您错过了(numbers[i] *= 2)(numbers[i] *= 1);

中的索引

要检查第三个元素,您需要检查索引(i+1)%3 == 0,因为您的数组从索引0开始;

答案 2 :(得分:1)

您的代码中有2个错误:

  1. numbers[i] % 3 == 0:这意味着如果任何数字的块为3的倍数,而不是第3个索引的每个数字,则执行  解决方案:(i + 1) % 3 == 0
  2. numbers *= 2:您正在尝试将数组与数组元素相乘。您将获得 NaN
     解决方案:numbers[i] *= 2;
  3. 然而,这是另一种使用map的方法:

    numbers = numbers.map(function (i, idx) {
        return (idx + 1) % 3 == 0 ? 2*i : i
    }) 
    

    这是一个地图功能的文档: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map?v=example

答案 3 :(得分:0)

你想检查索引,我想不是数字值。

在for循环而不是

number[i] % 3

使用

i % 3

答案 4 :(得分:0)

您使用numbers[i],即实际数字而不是索引。因此,将if(number[i]%3==0)替换为if(i%3==0)

其次,在if else条件下更新整个数组而不是数组元素。因此,请使用numbers[i] *=2代替number *= 2

使用以下代码段更改数组:

for (var i = 1; i <= numbers.length; i++)
    if (i % 3 == 0) {
        numbers[i] *= 2;
    }
    else {
        numbers[i] *= 1;
   }
}

答案 5 :(得分:0)

你的逻辑错了。而不是采用值的模数,你应该采用指数的模数。相反,if (numbers[i] % 3 == 0)这个你应该做的是if (i % 3 == 0)。希望这会有所帮助。

答案 6 :(得分:0)

您可以稍微更改整个程序,而不使用 go 的其他变量。

正如在提到的评论中,您可以使用步长3进行迭代,并使用余数运算符%省略检查。

对数组元素的赋值,需要引用带有变量名和左侧索引的数组,以及赋值运算符和用于获取所需结果的表达式。

numbers[i] *= 2;

var n,
    i,
    numbers = [];
    
do {
    n = parseFloat(prompt("Number please"));
    numbers.push(n);
} while (confirm("One more number?"))

console.log(numbers);
for (i = 0; i < numbers.length; i += 3) {
    numbers[i] *= 2;
}
console.log(numbers);

答案 7 :(得分:-1)

您可以使用数学模数运算符。每三分之一意味着%3。

https://www.w3schools.com/js/js_arithmetic.asp

如果在条件中使用它,则索引%3将在true时返回0。

if (index % 3 == 0)