首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Array.map与新的数组构造函数一起使用

将Array.map与新的数组构造函数一起使用
EN

Stack Overflow用户
提问于 2016-05-27 23:46:02
回答 5查看 2.8K关注 0票数 9

我尝试在map中使用new Array()构造函数,以便创建一个创建元素列表的单行代码。如下所示:

代码语言:javascript
复制
let arr = new Array(12).map( (el, i) => {
  console.log('This is never called');
  return i + 1;
});

阅读docs,这种行为是有意义的。

文档基本上说,即使在数组中声明了未定义的值,也会执行map的回调,但不会像之前的代码那样创建空数组。

因此,这应该是可行的:

代码语言:javascript
复制
var arr = new Array(12);

for(let i = 0; i < arr.length ; i++){
  arr[i] = undefined;
}

let list = arr.map( (e, i) => {
  console.log(i + 1);
  return i + 1;
});

所以,我们也可以这样做:

代码语言:javascript
复制
let newArray = (length) => {
  let myArray = new Array(length);
  for(let i = 0; i < length; i++) myArray[i] = undefined;
  return myArray;
};

console.log( newArray(12).map( (el, i) => i + 1 ) );

所以我的问题是。有没有更好/更好的使用map函数的方法呢?

提前感谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-05-27 23:49:10

您可以使用Array#from创建具有传递长度的数组。

代码语言:javascript
复制
Array.from({length: 12}, (e, i) => i + 1);
票数 17
EN

Stack Overflow用户

发布于 2018-05-31 17:54:22

如果我没记错的话,你明确地说过你想要一个新的数组构造函数的答案。

下面是如何做到这一点的。一句话,漂亮的ES6:

代码语言:javascript
复制
let me = [...new Array(5)].map((x,i)=>i)
// [0,1,2,3,4]

解释:

  1. new Array(5)生成以下内容:[ , , , , ]​​​​​
  2. [...new Array(5)]Array.from(new Array(5))的缩写,并生成以下内容:​​​​​[ undefined, undefined, undefined, undefined, undefined ]​​​​​,即undefined对象的数组。是的,undefined是一个值(一个原始值:)。
  3. 现在我们可以遍历全新数组的值:D

PS:您甚至可以跳过new关键字并执行以下操作:

代码语言:javascript
复制
[...Array(5)].map((x,i)=>i)
票数 7
EN

Stack Overflow用户

发布于 2016-05-27 23:49:21

the specSection 22.1.3.15正在使用NOTE 1的最后一行代码

callbackfn仅对数组中实际存在的元素调用;不对数组中缺少的元素调用。

filterforEach和其他函数式方法都有这种行为。

您正在调用的数组构造函数(来自section 22.1.1.2Array(len) )将设置数组的长度,但不会初始化元素。我不确定规范在哪里定义了缺失的元素,但是由new Array(len)生成的数组应该符合这一点,因此map不会接触到任何元素。

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

https://stackoverflow.com/questions/37487602

复制
相关文章

相似问题

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