理解length
和其他语言一样,js的数组索引是从0开始的,但是我在文档上看到一些我看到的有意思的操纵
写一个小于数组元素数量的值会缩短数组,写0会彻底清空数组
var arr = ['a','b','c'];
console.log(arr.length); //输出3
对arr的length属性赋值
arr.length = 2;
console.log(arr) // 可以发现输出的数组中只有a和b
arr.length = 0;
console.log(arr); //arr被清空
再次赋值为3
arr.length = 3;
console.log(arr) //arr为长度为三的空数组
数组方法
在末尾添加和删除的方法 push(),pop()
凡添加都是返回长度,删除则返回该元素
在开头添加和删除的方法 unshift(),shift()
截取数组片段slice()注意点截取数组时包括beginIndex,不包括endIndex
移除元素方法splice和slice只有一个p的差别,不同的是splice只移除元素,也可替换数组元素,但不把结果返回,
var myArray = new Array (“1”, “2”, “3”, “4”, “5”);
myArray.splice(1, 3, “a”, “b”, “c”, “d”);
// myArray is now [“1”, “a”, “b”, “c”, “d”, “5”]
颠倒数组reverse
foreach和map都可遍历数组,但map把结果返回,且在回调函数可操作数组
var a = ['a', 'b', 'c'];
a.forEach(function(element) { console.log(element);} );//返回每一个元素
var a1 = ['a', 'b', 'c'];
var a2 = a1.map(function(item) { return item.toUpperCase(); });
console.log(a2); // ['A','B','C']
var a3 = a2.map(eachToLowerCase);
function eachToLowerCase(item) {
return item.toLowerCase();
}
console.log(a3);
filter 返回一个包含所有在回调函数上返回为true的元素的新数组
var a1 = ['a', 10, 'b', 20, 'c', 30];
var a2 = a1.filter((item) => typeof item == 'number');
console.log(a2); // logs 10,20,30
every 与filter相同但是返回的是布尔值
var a1 = [1,2,3];
console.log(a1.every(function(item){ return typeof item == 'number'}));//true
var a2 = [1,'2',3];
console.log(a2.every(function(item){ return typeof item == 'number'}));//false
some 和every一样也是返回布尔值,从名字就可以看出来,some只需有一项符合条件,就可返回真
reduce 利用callback进行求和 ,reduceRight则是从数组右边开始
var a = [10, 20, 30];
var total = a.reduce(function(first, second) { return first + second; }, 0);
console.log(total) // Prints 60
var a2 = [10, 20, 30];
var total = a2.reduce(function(first, second) { return first + second; }, 10);
console.log(total) // Prints 70
类数组对象
类数组对象不是由Array构造函数所创建,但是可以应用数组的操作方法,注意是应用不是调用
var obj = {0:'张三',1:'里斯',2:'王五',length:3};
console.log(Array.prototype.slice.call(obj)); // ['张三','里斯','王五']
用Array.from也可将类数组对象转化为数组
在浏览器环境中,document.getElementsByTagName()语句返回的就是一个类数组对象
数组推导式
在 ECMAScript 7, array comprehensions 被规范化并提供一个有用的快捷方式,用来实现如何在另一个数组的基础上构造一个新的数组。推导式可以经常被用在那些需要调用 map() 和 filter()函数的地方,或作为一种结合这两种方式。
var num = [1,2,3];
var num2 = [for(i of num) i*2];
console.log(num2); //[2,4,6]
等价于map操作
var num3 = num.map((i) => i*2);//num3[2,4,6]
数组去重
利用Array的set可以达到数组去重的效果
var arr = [1,1,2,3,4,4,5,5,6,6];
var arr2 = [...new Set(arr)]; //...表示展开操作符
console.log(arr2); //输出[1,2,3,4,5,6]