...var 在 Array​.prototype​.map() 上的含义是啥 [重复]

Posted

技术标签:

【中文标题】...var 在 Array​.prototype​.map() 上的含义是啥 [重复]【英文标题】:what does ...var means on Array​.prototype​.map() [duplicate]...var 在 Array​.prototype​.map() 上的含义是什么 [重复] 【发布时间】:2019-10-18 14:35:25 【问题描述】:

我在创建匿名函数和使用 map 方面相当陌生,...i 在以下代码行中是什么意思。 tia

const airlines = this.state.airlines.map(i => ( ...i, editing : this.state.editing && i===item ) )

【问题讨论】:

它是传播运算符。 developer.mozilla.org/en-US/docs/Web/javascript/Reference/… ...a: 1, b: 2, c: 3 a: 1, b:2, c:3 [ ...[1, 2, 3], 4 ][1, 2, 3, 4] @user202729 是的,分配给将由map 的回调返回的对象的键 @Kaiido 再次阅读链接的问题和答案后,看起来 answer 包含对象的扩展语法,但不包含问题。也许应该更改问题标题。 @user202729 我们目前无法判断i 是什么。链接的问题处理最常见的情况(对象和数组),我怀疑 OP 使用的是具有自己 Symbol.iterator 的奇异对象。 【参考方案1】:

它被称为spread syntax,在当前上下文中它涉及复制一个对象。和这样做是一样的:

const airlines = this.state.airlines.map(object => 
    object.editing = this.state.editing && object === item;
    return object;
);

所以我们要做的是创建对象的浅表副本,并向其添加属性。这就是扩展语法的目的——制作浅拷贝,或为浅拷贝收集项目(称为休息语法——收集其余项目)。这是展开语法的简化示例:

const arr = [
  name: "Jack"
, 
  name: "Joe"
];    
const res = arr.map(e => ( ...e,
  age: Infinity
));    
console.log(res);
.as-console-wrapper 
  max-height: 100% !important;
  top: auto;

【讨论】:

以上是关于...var 在 Array​.prototype​.map() 上的含义是啥 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

先发布,后订阅

bind 源码学习

将arguments转为数组

张静宜对订阅-发布模式的理解

javascript Object使用Array的方法

forEach兼容ie8