javaScript复习———数组总结

  1. 数组
  2. 创建数组的方法
  3. 如何识别变量是数组
  4. 数组常用API
  5. 常见的数组面试题
    1. 判断数组中是否包含某一项
    2. 数组去重

数组

javaScript中数组的作用就是用单一变量储存多个值。

数组是一种特殊类型的对象。对象是使用命名索引,数组使用数字索引

创建数组的方法

  • 数组文本方法(字面量形式)

    var arr = [“zhangsan”,”lisi”];

  • 通过关键字new创建Array对象的实例

    但我们还是避免使用JS的内建数组构造器new Array。为了简洁,可读性和执行速度,还是用上一种方法吧!

    var arr = new Array(“zhangsan”,”lisi”);

如何识别变量是数组

  • array.isArray()

typeof运算符只能返回Object结果,为了解决这个问题,ES5定义了一个新方法Array.isArray().

var obj = [];
Array.isArray(obj);    // true

当然还有其他方法,具体看这里

数组常用API

  • 常见的数组面试题

判断数组中是否包含某一项

  • array.indexOf()

    Array.indexOf()接收一个参数,返回这个参数在数组中的位置索引,如果不存在则返回-1

    var arr = [1,2,3];
    arr.indexOf(1);   // 0
  • 遍历查找

    遍历数组,查找这一项,如果存在就返回true,否则返回false

数组去重

虽然在真实项目中,很少让前端处理数组去重,但是这却是面试常问的点,敲黑板!记笔记!(我的这些方法不全面,建议去看看大佬整理的更详细的总结,毕竟我看过一篇文章总结了12种方法呢!)

  • 简单去重方法

    思路:创建一个新数组,在遍历原数组的过程中检测值是否在新数组中,如果不存在就将这个值push到新数组中。

    function uniq(arr) {
        var temp= [];     // 新数组 
        for(let i = 0, len = arr.length; i < len; i++) {
            if(temp.indexOf(arr[i]) === -1) {
                temp.push(arr[i]);
            }
        }
        return temp;
    }

忍不住叨叨一个点,经常看到有var len = arr.length,避免了直接比较i<arr.length,其实这是为了提高性能的一个小细节。试想一下,每循环一次就要调用一次Array.length属性,而数组存放在堆内存中。然而定义的len变量可以直接放在栈内存中呀,访问栈可比堆快多了!

  • 排序后相邻比较去除

    思路:给数组排序,相邻项比较,把不同的值传到新数组中。

    function uniq(arr) {
        let temp = [];
        arr.sort();   // 得到排序后的数组
        for(let i = 0, len = arr.length; i < len; i++) {
            if(arr[i] !== arr[i+1]) {
                temp.push(arr[i])
            }
        }
        return temp;
    } 

我要继续叨叨一次! 我一开始的思路是比较相邻项,然后用splice()删除重复项。哼,我想的可美了,结果忘记了由于删除项,导致后一项被提前了,而下标没提前啊,于是变成下面这个样子了(我气!):

  • ES6中的set去重

    set是一个集合用来存放任何类型的唯一值。但是在引用类型时要格外注意,只有在引用同一个内存地址时才被认为相同。

    let demo = {a:1,b:2}
    let objSet = new Set([demo,demo]);
    console.log('objSet: ', objSet);        // objSet: {a: 1, b: 2},{a: 1,b: 2};

    瞅瞅这个看起来相同,实则不是引用同一个对象的栗子:

let objSet = new Set([{a:1,b:2}, {a:1,b:2}]);
console.log('objSet: ', objSet);        // objectSet: {a: 1, b: 2};

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 610193653@qq.com,谢谢啦!

文章标题:javaScript复习———数组总结

本文作者:zzzwyyy

发布时间:2019-12-02, 23:32:02

最后更新:2019-12-02, 23:32:28

原始链接:http://yoursite.com/2019/12/02/javaScript复习———数组总结/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录