zoukankan      html  css  js  c++  java
  • 这道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'}];
  • 相关阅读:
    一个web程序员的年终总结
    编程要诀-心态
    初识vps,域名与购买,初步配置
    一个好的学习方法真的很重要——费曼学习法
    [译]C# 7系列,Part 8: in Parameters in参数
    Dalsa 8K彩色相机Camera link C#采图
    精简Command版SqlHelper
    ASP.NET MVC模块化开发——动态挂载外部项目
    net core WebApi——依赖注入Autofac
    .NET Core 3 WPF MVVM框架 Prism系列之命令
  • 原文地址:https://www.cnblogs.com/login123/p/12149241.html
Copyright © 2011-2022 走看看