问题标签 [spread-syntax]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 使用 map 时使用扩展运算符扩展数组
我不确定这是否是正确的方法,但我很好奇它是否可以做到。我有一个对象,我需要从中创建一个数组,键是项,值 id 是它在数组中重复的次数。
哪个应该使['m','m','m','m','m','s','s' ... ]
这是工作方法:
是否可以通过这种方式完成:
javascript - JavaScript 扩展语法有问题
我刚刚阅读了 ES6 传播语法的 MDN 页面,页面上的大多数示例都有效,但最后一个没有:
我在 Chrome 和 Firefox 中都试过了,而且我运行的是最新的浏览器版本,所以页面说代码应该可以工作。
谁能告诉我问题是什么?
javascript - 如何将带有 ES6 Rest 的方法添加到 JS 对象
我有一个 Person 构造函数,我想添加一个应该添加朋友的方法。我想让我的用户传递可变数量的朋友,所以我想到了 ES6 的新“休息”功能。遗憾的是,我找不到出路。这是我的第一次尝试(错误:“Uncaught TypeError: f.addFriends is not a function(...)”):
我也尝试了以下代码(没有错误,但没有添加朋友):
我究竟做错了什么?非常感谢您的帮助!
javascript - ECMAScript 文档中的 SpreadElement 是什么?和 MDN 上的 Spread 语法一样吗?
在ECMAScript 规范中SpreadElement
描述了
扩展语法允许在预期零个或多个参数(对于函数调用)或元素(对于数组字面量)的地方扩展诸如数组表达式或字符串之类的可迭代对象,或者在零个或多个参数的地方扩展对象表达式键值对(用于对象文字)是预期的。
句法
对于函数调用:
对于数组文字:
在MDN文档中描述?
SpreadElement
和,或,传播语法的用例是什么?ifSpreadElement
和 spread 语法不同,它们在哪些具体方式上有所不同?
javascript - ES6 JS 中的扩展语法如何作为函数参数工作?
好的,所以我试图了解新的价差如何作为函数参数工作。想象一个具有未知数量参数的函数并将它们加在一起。
这个功能显然有效。那么,我的问题是什么?那么这里有一些观察,然后是我的问题:
- 作为函数参数/参数的传播语法似乎旨在将值数组“传播”为单独的参数:
根据我所做的研究,扩展语法可用于将数组传递给不接受数组作为标准参数的函数,例如 Array.prototype.push(),而不必使用apply
:
但是在这种情况下传递给的数组push
需要事先声明/定义(在这种情况下y
)
- 这可以通过查看函数内部参数对象的长度来确认
如果我使用addNums(1,2,3,4)
,arguments.length
仍然 == 4。所以,该函数似乎仍然被称为addNums(1,2,3,4)
问题
我的问题是我没有addNums
使用数组作为要处理的扩展语法的参数进行调用。我没有打电话addNums([1,2,3,...])
我正在努力理解的行为是,似乎有一个秘密的隐藏步骤,给定一个以扩展语法作为其单个参数声明的函数:
然后用参数列表调用:
有arguments
对象的生成,并且还创建了一个类型的变量,其名称与具有扩展语法的函数参数的名称相同。Array
对于更有经验的编码人员来说,这可能是显而易见的或微不足道的,但在我看来,这与迄今为止提出的用例相反,例如在一组未知长度的参数中传播一组值。
实际上,我想说的是,当使用多个参数调用函数但使用扩展语法使用单个参数定义时,不是跨参数读取和拆分数组,而是扩展语法实际上类似于:Array.apply(null, arguments)
或者var a = [arg1, arg2, ...]
- ** 它是创造者而不是传播者 **
我的研究来源:
- http://es6-features.org/#SpreadOperator
- https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_Syntax
- 扩展语法 ES6
特别是对问题的评论“@void 主要用于函数调用,即如果 myFunc 接受未知数量的参数,我们可以将参数作为带有扩展的数组提供。像这样:myFunc(...dynamicallyGeneratedArgs)”
javascript - 如果 console.log(...arguments) 正常,为什么 var a = ...arguments 会失败?
代码 A,这没关系并记录[ 1, 2, 3 ]
代码 B,这也失败了SyntaxError: Unexpected token ...
,换行...arguments
也()
无济于事。
我假设在这两种情况下,我们都有一个RHS
查找。为什么可以传递...arguments
给console.log
(或其他函数),但不能将其分配给变量?
PS。我知道这永远不会出现在现实生活中的代码中,或者还有其他更好的解决方案。我的问题纯粹是理论/概念性的,仅限于理解为什么会发生不同的行为。
javascript - 复制反应组件属性时,传播语法会出错
我正在使用反应,我正在尝试使用传播语法。由于某种原因,它不起作用并给出错误:
知道我做错了什么吗?
javascript - 使用扩展语法在 ES6 中进行深度复制
我正在尝试为我的 Redux 项目创建一个深度复制映射方法,该方法将使用对象而不是数组。我读到在 Redux 中,每个状态都不应该改变之前的状态。
有用:
但是它不会深度复制内部项目,因此我需要将其调整为:
这不太优雅,因为它需要知道传递了哪些对象。ES6 中有没有一种方法可以使用扩展语法来深度复制对象?
javascript - 状态为对象数组与由 id 键入的对象
在Designing the State Shape章节中,文档建议将您的状态保存在由 ID 键入的对象中:
将对象中的每个实体保存为以 ID 作为键存储,并使用 ID 从其他实体或列表中引用它。
他们继续陈述
将应用程序的状态视为数据库。
我正在处理过滤器列表的状态形状,其中一些将打开(它们显示在弹出窗口中),或者已选择选项。当我阅读“将应用程序的状态视为数据库”时,我想到将它们视为 JSON 响应,因为它将从 API(本身由数据库支持)返回。
所以我认为它是
但是,文档建议的格式更像
从理论上讲,只要数据是可序列化的(在“状态”标题下) ,这无关紧要。
所以我很高兴地使用了对象数组方法,直到我开始编写我的 reducer。
使用 object-keyed-by-id 方法(以及自由使用扩展语法),OPEN_FILTER
reducer 的部分变为
而使用对象数组方法,它更冗长(并且依赖于辅助函数)
所以我的问题有三个:
1)reducer 的简单性是采用 object-keyed-by-id 方法的动机吗?这种状态形状还有其他优点吗?
和
2) 似乎 object-keyed-by-id 方法使得处理 API 的标准 JSON 输入/输出变得更加困难。(这就是我首先使用对象数组的原因。)因此,如果您采用这种方法,您是否只是使用一个函数在 JSON 格式和状态形状格式之间来回转换它?这似乎很笨拙。(尽管如果您提倡这种方法,那么您的部分推理是否比上面的对象数组缩减器更笨重?)
和
3)我知道 Dan Abramov 设计的 redux 在理论上是与状态数据结构无关的(正如“按照惯例,顶级状态是一个对象或其他一些键值集合,如 Map,但从技术上讲,它可以是任何类型,”强调我的)。但是鉴于上述情况,是否只是“建议”将其保留为由 ID 键入的对象,或者我是否会遇到其他无法预料的痛点,方法是使用一组对象,使我应该中止它计划并尝试坚持使用 ID 键入的对象?
javascript - 为什么 babel 不理解 react-starter-kit 中传播运算符的这种用法?
来自react-starter-kit
,一个非常流行的样板:
每当我尝试运行或构建时,这条线总是失败:
错误:
我相信其他传播工作的例子。
我已经尝试了我认为是显而易见的补救措施:
- 删除
node_modules
并重新安装 - 修剪
babelrc
- 使用
babelrc
与不使用babelrc
(本例默认为后者) - 不同的
babel
预设 - 巫毒教
这个让我发疯,因为存储库说它可以构建并且我信任它们,但它似乎并不适合我。