数组去重
- es6的Set:
function norepeat (arr) {
let a = new Set(arr)
return [...a]
}
- 2.
indexOf() === -1 ,不存在
//建立新数组,判断当前循环的值在新数组中是否存在,不存在就push
function doit (arr) {
var temp = []
for (let i = 0; i < arr.length; i++) {
if (temp.indexOf(arr[i]) === -1) {
temp.push(arr[i])
}
}
return temp
}
function doit (arr) {
var temp = []
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) === i) {
temp.push(arr[i])
}
}
return temp
}
数组乱序的方法
1.时间复杂度约为 O(n2),splice()方法会遍历一次
function shuffle(a) {
var b = [];
while (a.length > 0) {
var index = parseInt(Math.random() * (a.length - 1));
b.push(a[index]);
a.splice(index, 1);
}
return b;
}
2.时间复杂度为 O(n)
function shuffle(a) {
var len = a.length;
for (var i = 0; i < len - 1; i++) {
var index = parseInt(Math.random() * (len - i));
var temp = a[index];
a[index] = a[len - i - 1];
a[len - i - 1] = temp;
}
}
splice(index,num,item1,item2,item3)
- 从下标为index的开始删除num个,再从index的位置插入item1,item2….
var a = [1,2,3,4,5,3]
let b = a.splice(1,2,6,0,3)
// b => [2,3] ,返回删除元素
// a => [1,6,0,3,4,5,3]
类数组
定义:拥有length属性,其他属性(索引)为非负整数,不具有数组的方法
javascript中常见的类数组有arguments对象和DOM方法的返回结果。
比如 document.getElementsByTagName()
// 类数组示例
var a = {'1':'gg','2':'love','4':'meimei',length:5};
Array.prototype.join.call(a,'+'); //'+gg+love++meimei'
// 非类数组
var c = {'1':2};
除了for循环还可以用什么方式循环
1、do/while
2、map
for in 和for of
( var a in obj )===a是key
( var a of obj )===a是value