将多个值添加到数组中会出现问题

时间:2017-07-05 18:30:41

标签: javascript arrays foreach

我试图了解有关数组的更多信息,因此我只是编写了这个简单的函数:
(我从doThis调用onClick进行测试

function doThis() {
    var multiplier = 3;
    var list = [23, 54, 23, 25, 65];
    var products = multiply(list, multiplier);
    console.log(products);
}
function multiply(list, multiplier) {
    list.forEach(function (element){
        var multi = [element * multiplier];
        console.log(multi);
        return multi;
    });
}

我的问题有两个方面:

  1. var products正在返回undefined
  2. 当我逐步调试调试器中的代码时,它会显示算法正确完成,但它不会在变量multi中存储多个值。
  3. 最终目标是让var products持有multi数组。

5 个答案:

答案 0 :(得分:1)

使用map()当您计划从现有阵列返回新阵列时。 forEach()允许您迭代数组,但不会返回任何新数组。



function doThis() {
    var multiplier = 3;
    var list = [23, 54, 23, 25, 65];
    var products = multiply(list, multiplier);
    console.log(products);
}
function multiply(list, multiplier) {
   return list.map(function (element){
        return element * multiplier;
    });
}

doThis();




答案 1 :(得分:0)

这里有多点:

  1. 函数 multiply()未返回list.forEach()的返回值。在list.forEach(function (element){
  2. 之前添加return关键字
  3. forEach返回undefined
  4.   

    返回值

         

    undefined
       1

    要返回每次迭代的结果,请使用map()或手动将每个返回值添加到数组中。

    请参阅下面代码段中的更改。

    要详细了解map()和类似功能,请尝试these exercises

    function doThis() {
      var multiplier = 3
      var list = [23, 54, 23, 25, 65]
      var products = multiply(list, multiplier)
      console.log('products: ', products)
    }
    
    function multiply(list, multiplier) {
      return list.map(
        function(element) {
          var multi = [element * multiplier]
          return multi
        }
      );
    }
    document.getElementById('doThis').addEventListener('click', doThis);
    <button id="doThis">doThis()</button>

    1 <子> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Return_value

答案 2 :(得分:0)

在数组上的return函数中使用forEach不会更改原始数组的值。

您需要指定要设置值的位置。我建议在forEach匿名函数中使用第二个参数,作为元素的索引。

然后您可以轻松地执行list[index] = "my new value";

此外,将乘法操作的值放在括号之间(您执行var multi = [element * multiplier];)会为每个值创建一个单元素数组。

以下是我如何保留一维数组:

&#13;
&#13;
function doThis() {
    var multiplier = 3
    var list = [23, 54, 23, 25, 65]
    var products = multiply(list, multiplier)
    console.log(products)
}

function multiply(list, multiplier) {
    list.forEach(function(element, index) {
        list[index] = element * multiplier
    });

    return list;
}

doThis();
&#13;
&#13;
&#13;

答案 3 :(得分:0)

 function doThis() {
    var multiplier = 3
    var list = [23, 54, 23, 25, 65]
    var products = multiply(list, multiplier)
    console.log(products)
}

function multiply(list, multiplier) {
var multi = [] ;
list.forEach(
   function (element){
       multi.push(element * multiplier)
       console.log(multi)
       //return multi
   }
);
return multi ;
}

答案 4 :(得分:0)

您在学习数组时可以使用for循环:

function multiply(list, multiplier) {
    var multi = [];
    for (i = 0; i < list.length; i++) {
        multi.push(list[i] * multiplier)
    }

    return multi;
}