这道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 calls a provided callback function once for each element in an array, in order, and constructs a new array from the results. callback is invoked only for indexes of the array which have assigned values (including undefined).

It is not called for missing elements of the array; that is:

  • indexes that have never been set;
  • which have been deleted; or
  • which have never been assigned a value.


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'}];
目录
相关文章
|
JavaScript 前端开发 UED
js易错面试题含答案
js易错面试题含答案
49 0
|
存储 算法 JavaScript
这道题原来可以用到JS这么多知识点!
这道题原来可以用到JS这么多知识点! 这几天刷到一道算法题,发它对我们的基础考查挺大,不仅是算法基础,还有语言的基础,其运行机制这些,下面我们来看看这道题。 可以转载,但请声明源链接:文章源链接justin3go.com(有些latex公式某些平台不能渲染可查看这个网站)
88 0
|
存储 JavaScript 数据安全/隐私保护
重温js ——位运算
位运算是在数字底层(即表示数字的 32 个数位)进行运算的。由于位运算是低级的运算操作,所以速度往往也是最快的(相对其它运算如加减乘除来说),并且借助位运算有时我们还能实现更简单的程序逻辑,缺点是很不直观,许多场合不能够使用。
重温js ——位运算
|
JavaScript
JS 刷 Leetcode:118.杨辉三角
JS 刷 Leetcode:118.杨辉三角
JS 刷 Leetcode:118.杨辉三角
|
JavaScript 前端开发 索引
JS 刷 Leetcode:119.杨辉三角 II
JS 刷 Leetcode:119.杨辉三角 II
JS 刷 Leetcode:119.杨辉三角 II
|
JavaScript 算法
JS 刷 Leetcode:001. 两数之和
JS 刷 Leetcode:001. 两数之和
JS 刷 Leetcode:001. 两数之和
|
JavaScript
几道js面试题
几道js面试题
69 4
|
JavaScript
这道 JS 经典面试题不要背,今天帮你彻底搞懂它!
全网最详细解析,这是一道非常经典的面试题,涵盖了从函数的基本概念、运算符优先级,到作用域链、原型链、this关键字、new关键字等基础知识点考察
【leetcode刷题记录】js-两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
|
JavaScript
js力扣每日一题---905.按奇偶排序数组
js力扣每日一题---905.按奇偶排序数组