javaScript复习—数组总结
数组
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-16, 12:37:51
原始链接:http://yoursite.com/2019/12/02/javaScript复习—数组总结/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。