• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
123
博客园    首页    新随笔    联系   管理    订阅  订阅
这道JS笔试题你做对了吗?

昨天在看一道笔试题的时候本以为很简单,但是结果不是我想象的那样,直接上笔试题。

const array = new Array(5).map((item) => {
  return item = {
    name: '1'
  }
});
console.log(array);
// 请写出输出结果

我想象的答案:[{name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}];

实际的答案:[empty × 5]

为什么会这样了?

猜想1

我第一个想到的是new Array(5)生成的数组是[undefined, undefined, undefined, undefined, undefined]。

const array = [undefined, undefined, undefined, undefined, undefined];
const newArr = array.map((item) => {
  return item = {
     name: '1'
   }  
});
console.log(newArr);
// 结果是[{name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}];

猜想1错误

猜想2

new Array(5)生成的数组在每一项都没有值,意思就是生成了[,,,,,]一个这样的数组。

const array = [,,,,,];
const newArr = array.map((item) => {
  return item = {
     name: '1'
   }  
});
console.log(newArr);
// 结果是[empty × 5];

猜想2正确(这里大喊自己牛逼)

为什么

map依次为数组中的每个元素调用一次提供的callback函数,然后根据结果构造一个新的数组。-----仅对已分配值(包括)的数组索引进行调用----。 map函数的回调函数只会被赋过值的项调用。new Array(1) 和 [undefined]不一样。new Array(1)没有为数组中的项赋过值,而[undefined]为数组中的项赋了一个undefined值。

总结

  • new Array(5)产生的数组是一个没有为数组中的项赋过值的数组。
  • map仅对已分配值(包括)的数组索引进行callback调用。

优化处理

// 处理1
const array = new Array(5).fill().map((item) => {
  return item = {
    name: '1'
  }
});
console.log(array);
// [{name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}];

// 处理2
var array = Array.apply(0,{length:5}).map((item) => {
  return item = {
    name: '1'
  }
});
console.log(array);
// [{name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}, {name: '1'}];
posted on 2020-01-04 15:39  login123  阅读(125)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3