【问题标题】:How to return multiple values ​with a function?如何用函数返回多个值?
【发布时间】:2019-05-23 02:27:38
【问题描述】:

怎样才能让函数返回3个值给我,这样这3个值就可以作为另一个函数的输入参数了(好像是一个回调——其实我觉得是--)?

到目前为止,请尝试以下方法(尽管它不起作用):

var resultado;
function num_2(repet){
	for (var i = 0; i > repet-1; i++) {
		if (i>=1) {
			return i + ", ";
		}else{
			return i;
		}
	}
}


function sumarr(a,b,c){
	if (a!="" && a!=null) {
		resultado = a+b+c;
		return "\n" + "resul: " + resultado + '\n' + "1: " +
		a + '\n' + "2: " + b + '\n' + "3: " + c + '\n' + '\n';
	}else{
		return "noting";
	}
}
console.log("\n" + "callback 2: " + sumarr(num_2(3)));

【问题讨论】:

  • 你能告诉你代码的预期输出吗?
  • 在你的函数参数中返回一个数组和spread
  • 你不能在 JS 中这样做。您可以将参数作为数组传递以帮助您解决问题。
  • num_2 中的 for 循环将只经过一次迭代,因为返回。看起来您打算将 i 添加到数组或字符串中,稍后您将其作为单个变量返回。
  • 对不起,你只能从一个函数中返回一个东西。但是那个东西可以包含其他东西。

标签: javascript html function callback


【解决方案1】:

您可以从第一个函数返回一个数组,然后使用展开运算符将每个元素作为独立参数传递给另一个函数。

var resultado;
function num_2(repet){
  return [...Array(repet)].map((x,i) => i)
}
function sumarr(a,b,c){
	return a + b + c
}
console.log("\n" + "callback 2: " + sumarr(...num_2(3)))

如果你很难理解第一个功能,那么它与

相同
function num_2(repet){
  let res = [];
  for(let i = 0;i<repet;i++){
     res.push(i)
  }
  return res;
}

【讨论】:

    【解决方案2】:

    你有两个选择;返回一个 JSON 对象,返回一个数组。

    返回一个 JSON 对象,您可以命名属性,然后修改第二个函数以接受对象并访问属性;

    var input = function() { 
       return { 
         a: 1, 
         b: 2 
       }; 
    }
       
    var output = function(obj) { 
       console.log(obj.a);
       console.log(obj.b);
    }
    
    output(input());

    返回一个数组并将其用作参数以使用apply()spread syntax 调用函数

    var input = function() { 
       return [1, 2]; 
    }
      
    var output = function(a, b) { 
       console.log(a);
       console.log(b);
    }
    
    output.apply(this, input());
    
    output(...input());

    这些都具有相同的结果,在控制台中打印以下内容;

    1
    2
    

    【讨论】:

    • @MaheerAli 提供了我在这里添加的扩展语法的答案。
    【解决方案3】:

    带有 JS 对象:

    var Vals = Return3Values();
    
    console.log( Vals.a, Vals.b, Vals.c );
    
    function Return3Values()
    {
     return {a:5, b:'hello', c:15 }
    }

    【讨论】:

      【解决方案4】:

      如果你能够使用最新的 JS 功能,你可以在你的函数中使用Destructuring Assignment 来解决这个问题并清理你的代码。

      function logLotsOfThings({thing1, thing2, thing3}) {
        console.log(thing1, thing2, thing3)
      }
      
      function getLotsOfThings() {
        return {
          thing1: "I am thing 1",
          thing2: "I am thing 2",
          thing3: "I am thing 3"
        }
      }
      
      logLotsOfThings(getLotsOfThings())

      【讨论】:

        猜你喜欢
        • 2020-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        • 2018-08-10
        • 1970-01-01
        相关资源
        最近更新 更多