我试图在JavaScript中返回两个值。那可能吗?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
我试图在JavaScript中返回两个值。那可能吗?
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
在javascript中返回多个值的一种非常常见的方法是使用对象常量,因此类似:
const myFunction = () => {
const firstName = "Alireza",
familyName = "Dezfoolian",
age = 35;
return { firstName, familyName, age};
}
并获得像这样的值:
myFunction().firstName; //Alireza
myFunction().familyName; //Dezfoolian
myFunction().age; //age
或更短的方法:
const {firstName, familyName, age} = myFunction();
并像这样单独获取它们:
firstName; //Alireza
familyName; //Dezfoolian
age; //35
几天前,我有类似的要求,即从我创建的函数中获取多个返回值。
从许多返回值中,我需要它仅返回给定条件的特定值,然后返回对应于其他条件的其他返回值。
这是我如何做到这一点的例子:
功能:
function myTodayDate(){
var today = new Date();
var day = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var month = ["January","February","March","April","May","June","July","August","September","October","November","December"];
var myTodayObj =
{
myDate : today.getDate(),
myDay : day[today.getDay()],
myMonth : month[today.getMonth()],
year : today.getFullYear()
}
return myTodayObj;
}
从函数返回的对象中获取必需的返回值:
var todayDate = myTodayDate().myDate;
var todayDay = myTodayDate().myDay;
var todayMonth = myTodayDate().myMonth;
var todayYear = myTodayDate().year;
回答这个问题的重点是分享这种以良好格式获取Date的方法。希望它对您有所帮助:)
我知道执行此操作的两种方法:1.以数组形式返回2.以对象形式返回
这是我发现的一个示例:
<script>
// Defining function
function divideNumbers(dividend, divisor){
var quotient = dividend / divisor;
var arr = [dividend, divisor, quotient];
return arr;
}
// Store returned value in a variable
var all = divideNumbers(10, 2);
// Displaying individual values
alert(all[0]); // 0utputs: 10
alert(all[1]); // 0utputs: 2
alert(all[2]); // 0utputs: 5
</script>
<script>
// Defining function
function divideNumbers(dividend, divisor){
var quotient = dividend / divisor;
var obj = {
dividend: dividend,
divisor: divisor,
quotient: quotient
};
return obj;
}
// Store returned value in a variable
var all = divideNumbers(10, 2);
// Displaying individual values
alert(all.dividend); // 0utputs: 10
alert(all.divisor); // 0utputs: 2
alert(all.quotient); // 0utputs: 5
</script>
添加缺少的重要部分,使该问题成为完整的资源,因为这会出现在搜索结果中。
对象分解
在对象分解中,您不必使用与变量名相同的键值,可以通过如下定义变量名来分配不同的变量名:
const newCodes = () => {
let dCodes = fg.codecsCodes.rs;
let dCodes2 = fg.codecsCodes2.rs;
return { dCodes, dCodes2 };
};
//destructuring
let { dCodes: code1, dCodes2: code2 } = newCodes();
//now it can be accessed by code1 & code2
console.log(code1, code2);
阵列解构
在数组解构中,可以跳过不需要的值。
const newCodes = () => {
//...
return [ dCodes, dCodes2, dCodes3 ];
};
let [ code1, code2 ] = newCodes(); //first two items
let [ code1, ,code3 ] = newCodes(); //skip middle item, get first & last
let [ ,, code3 ] = newCodes(); //skip first two items, get last
let [ code1, ...rest ] = newCodes(); //first item, and others as an array
值得一提的是,...rest
应该始终将其结尾,因为在将其他所有内容汇总到之后,销毁任何内容都没有任何意义rest
。
我希望这将为这个问题增加一些价值:)
好吧,我们不能完全做您的尝试。但是可以做到以下几点。
function multiReturnValues(){
return {x:10,y:20};
}
然后在调用方法时
const {x,y} = multiReturnValues();
console.log(x) ---> 10
console.log(y) ---> 20
我没有在这里添加新内容,而是另一种替代方式。
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
let [...val] = [dCodes,dCodes2];
return [...val];
};
您也可以这样做:
function a(){
var d=2;
var c=3;
var f=4;
return {d:d,c:c,f:f}
}
const {d,c,f} = a()
我建议使用最新的解构分配(但请确保您的环境支持它)
var newCodes = function () {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return {firstCodes: dCodes, secondCodes: dCodes2};
};
var {firstCodes, secondCodes} = newCodes()
没错。return
从左到右进行逻辑处理并返回最后一个值。
function foo(){
return 1,2,3;
}
>> foo()
>> 3
您可以使用“对象”
function newCodes(){
var obj= new Object();
obj.dCodes = fg.codecsCodes.rs;
obj.dCodes2 = fg.codecsCodes2.rs;
return obj;
}
在JS中,我们可以轻松地返回带有数组或对象的元组,但是不要忘记!=> JS是一种callback
面向语言,这里有一个关于“返回多个值”的秘密,现在还没有人提及,请尝试以下方法:
var newCodes = function() {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
return dCodes, dCodes2;
};
变成
var newCodes = function(fg, cb) {
var dCodes = fg.codecsCodes.rs;
var dCodes2 = fg.codecsCodes2.rs;
cb(null, dCodes, dCodes2);
};
:)
!这仅仅是解决问题的另一种方法。
您可以从Javascript 1.7开始使用“解构分配”进行此操作。请注意,这些在较旧的Javascript版本中不可用(意味着-ECMAScript 3rd和5th版本均不提供)。
它允许您同时分配1个以上变量:
var [x, y] = [1, 2];
x; // 1
y; // 2
// or
[x, y] = (function(){ return [3, 4]; })();
x; // 3
y; // 4
您还可以结合使用对象分解和属性值速记来命名对象中的返回值,并选择所需的值:
let {baz, foo} = (function(){ return {foo: 3, bar: 500, baz: 40} })();
baz; // 40
foo; // 3
顺便说一句,不要被ECMAScript允许您这样做的事实所迷惑return 1, 2, ...
。真正发生的事情似乎并不存在。在return语句表达- 1, 2, 3
-不过是一个逗号操作符适用于数字文本(1
,2
,和3
)顺序,最终计算结果为它的最后一个表达式的值- 3
。这就是为什么return 1, 2, 3
在功能上完全相同return 3
。
return 1, 2, 3;
// becomes
return 2, 3;
// becomes
return 3;
只需返回一个对象文字
function newCodes(){
var dCodes = fg.codecsCodes.rs; // Linked ICDs
var dCodes2 = fg.codecsCodes2.rs; //Linked CPTs
return {
dCodes: dCodes,
dCodes2: dCodes2
};
}
var result = newCodes();
alert(result.dCodes);
alert(result.dCodes2);
从ES6开始,您可以执行此操作
let newCodes = function() {
const dCodes = fg.codecsCodes.rs
const dCodes2 = fg.codecsCodes2.rs
return {dCodes, dCodes2}
};
let {dCodes, dCodes2} = newCodes()
返回表达式{dCodes, dCodes2}
是属性值的简写,并且等效于this {dCodes: dCodes, dCodes2: dCodes2}
。
最后一行的这种分配称为对象破坏分配。它提取对象的属性值,并将其分配给相同名称的变量。如果您想将返回值分配给不同名称的变量,则可以这样做let {dCodes: x, dCodes2: y} = newCodes()
最好的方法是
function a(){
var d=2;
var c=3;
var f=4;
return {d:d,c:c,f:f}
}
然后使用
a().f
返回4
在ES6中,您可以使用此代码
function a(){
var d=2;
var c=3;
var f=4;
return {d,c,f}
}
否,但是您可以返回一个包含您的值的数组:
function getValues() {
return [getFirstValue(), getSecondValue()];
}
然后,您可以像这样访问它们:
var values = getValues();
var first = values[0];
var second = values[1];
With the latest ECMAScript 6 syntax*, you can also destructure the return value more intuitively:
const [first, second] = getValues();
If you want to put "labels" on each of the returned values (easier to maintain), you can return an object:
function getValues() {
return {
first: getFirstValue(),
second: getSecondValue(),
};
}
And to access them:
var values = getValues();
var first = values.first;
var second = values.second;
Or with ES6 syntax:
const {first, second} = getValues();
* See this table for browser compatibility. Basically, all modern browsers aside from IE support this syntax, but you can compile ES6 code down to IE-compatible JavaScript at build time with tools like Babel.
除了返回其他建议的数组或对象之外,您还可以使用收集器函数(类似于The Little Schemer中的函数):
我进行了jsperf测试,以查看三种方法中哪种更快。阵列最快,而收集器最慢。
http://jsperf.com/returning-multiple-values-2