首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES6扩展操作符不是将数组扁平化吗?

ES6扩展操作符不是将数组扁平化吗?
EN

Stack Overflow用户
提问于 2017-01-10 10:16:55
回答 2查看 1.9K关注 0票数 4

没有反应具体,所以希望可以问,但我认为扩展操作符扁平数组?

因此,使用以下求和函数对args进行求和,您可以使用.apply传递值:

代码语言:javascript
复制
function sum() {
    return arguments.reduce((total, number) => total + number, 0);
}

var values = [2, 4, 8, 12, 16];

console.log(sum.apply(null, values));

我认为您可以添加这个函数,并使用spread操作符将数组扁平化,这样就可以使用调用。(我知道您不会在这个实例中使用call,但我只是感到惊讶,因为我认为这种扩展会使数组变平:

代码语言:javascript
复制
function sum() {
    return [...arguments].reduce((total, number) => total + number, 0);
}

var values = [2, 4, 8, 12, 16];

console.log(sum.call(null, values));

这将返回字符串02,4,8,12,16

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-10 10:34:00

之所以发生这种情况,是因为arguments与数组类似。数组将转换为字符串。

作为文件上说

虽然此函数的语法几乎与apply()的语法相同,但根本的区别是调用()接受参数列表,而apply()则接受单个参数数组。

这应如预期的那样适用于:

代码语言:javascript
复制
sum(...values);
sum.call(null, ...values);
sum.apply(null, values);

顺便说一下,argumentscall在ES6是不受欢迎的。

票数 2
EN

Stack Overflow用户

发布于 2017-01-10 10:18:51

参数是一个类似于结构的数组,所以当将数组作为参数传递时,该结构将类似于一个嵌套数组。因此,应用扩展算子可以得到一个格式为[[2, 4, 8, 12, 16]](即,[...[[2, 4, 8, 12, 16]]])的数组,而简化方法则应用0 + [2, 4, 8, 12, 16],并得到"02,4,8,12,16"

要使其工作,您需要使用Function#apply将数组值作为参数传递,或者获取第一个参数。

代码语言:javascript
复制
function sum() {
  return [...arguments].reduce((total, number) => total + number, 0);
}

var values = [2, 4, 8, 12, 16];

console.log(sum.apply(null, values));

代码语言:javascript
复制
function sum() {
  return [...arguments][0].reduce((total, number) => total + number, 0);
}

var values = [2, 4, 8, 12, 16];

console.log(sum.call(null, values));

参考:呼叫和应用有什么区别?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41566396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档