少看微博,多看博客!
一、首先创建数组
1.使用构造函数:
var arr = new Array();
var arr = new Array("a","b");
2.直接定义
var arr = ["a","b"];
二、常用方法
常用方法大概以下几种:splice(),slice(),join(),push(),pop(),shift() ,unshift(),sort(),reverse(),concat(),indexOf(), lastIndexOf() ,forEach() ,map() ,filter(),every() ,some() ,reduce()和 reduceRight()
1.最近用的比较多的就是splice(),对数组进行插入,删除或者替换。原来的数组会被改变!
语法:arr.splice(index,n,item)
index: 必需,整数,规定添加/删除项目的位置。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
n: 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item: 可选,向数组添加的新项目
- 插入元素:
var arr = ["a","b","c","d","e","f","g"];
- 在c之前插入三个元素:
arr.splice(2,0,"1","2","3");
- 此时数组 arr: [“a”, “b”, “1”, “2”, “3”, “c”, “d”, “e”, “f”, “g”];
- 删除元素:
- 想把arr=[“a”, “b”, “1”, “2”, “3”, “c”, “d”, “e”, “f”, “g”]; e后面的元素都删除,
arr.splice(7,3)
- 此时:arr: [“a”, “b”, “1”, “2”, “3”, “c”, “d”];
- 替换元素:
- 比如把cd 替换成4,5,6如下:
arr.splice(5,2,"4","5","6")
- 此时:数组arr :[“a”, “b”, “1”, “2”, “3”, “4”, “5”, “6”];
2. slice() 方法在数组中读取元素,不会改变原始数组
语法:arr.slice(start, end);
start:可选,开始位置;end:可选,终止位置.
var arr=["a", "b", "c", "d", "e", "f", "g"];
arr.slice(1,3);
//返回 ["b", "c"];
arr.slice(-3,-1);
//返回 ["e", "f"]
3.join() 方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。
arr.join(separator);
separator: 可选。分隔符,不写的话默认是逗号。
var arr=["a", "b", "c", "d", "e", "f", "g"];
arr.join();
//返回"a,b,c,d,e,f,g"
arr.join(";");
//返回"a;b;c;d;e;f;g"
4.push(),pop 和unshift()、shift()**
这两组同为对数组的操作,并且会改变数组的本身的长度及内容。
不同的是 push()、pop() 是从数组的尾部进行增减,unshift()、shift() 是从数组的头部进行增减。
//原数组长度为7
var arr=["a", "b", "c", "d", "e", "f", "g"];
arr.push("hi");
//返回 8
//此时 arr :["a", "b", "c", "d", "e", "f", "g", "hi"]
arr.pop()
//返回 "hi"
arr.push("j","k","l");
//返回 10
//此时 arr :["a", "b", "c", "d", "e", "f", "g", "j", "k", "l"]
可以看出,push,pop是从数组的尾部进行增减,且
push()向数组的 尾部 添加若干元素,并返回数组的新长度;
pop()从数组的 尾部删除1个元素(删且只删除1个),并返回被删除的元素;空数组是继续删除,不报错,但返回undefined;
//原数组长度为7
var arr=["a", "b", "c", "d", "e", "f", "g"];
arr.unshift("1","2");
//返回 9
//此时 arr :["1", "2", "a", "b", "c", "d", "e", "f", "g"]
arr.shift();
//返回 "1"
//此时 arr :["2", "a", "b", "c", "d", "e", "f", "g"]
unshift() shift() ,分别是从头部增加,删除元素,且unshift()向数组的 头部 添加若干元素,并返回数组的新长度;
shift()从数组的 头部删除1个元素(删且只删除1个),并返回被删除的元素;
5.concat()
concat() 方法用于连接两个或多个数组.返回一个新的数组。该方法不会改变现有的数组
var a=["a","b"];
var b=["c","d"];
var ab=a.concat(b);
//ab: ["a", "b", "c", "d"]
//a: ["a", "b"]
//b: ["c", "d"]
concat()和push区别在于concat()是先把原数组复制到一个新的数组,然后在新数组上进行操作。不会改变原有数组
6.sort() :用于对数组的元素进行排序。
语法:arrayObject.sort(sortby),sortby 必须是函数,规定排序顺序。
返回值:对数组的引用。数组在原数组上进行排序,不生成副本。即该方法会改变原数组。
(a-b输出从小到大排序,b-a输出从大到小排序);
$scope.mysortNum = function(a,b){
return a - b
}
$scope.sortNum = function(){
var a=["1","100","38","45","25","66"];
a.sort($scope.mysortNum);
document.write(a);
//输出["1", "25", "38", "45", "66", "100"]
}
$scope.mysortNum = function(a,b){
return b - a
}
$scope.sortNum = function(){
var a=["1","100","38","45","25","66"];
a.sort($scope.mysortNum);
document.write(a);
//输出["100", "66", "45", "38", "25", "1"]
}
$scope.sortNum();
7. reverse() 用于颠倒数组中元素的顺序,会改变原来的数组,而不会创建新的数组。
var a=["a","b","c"]
a.reverse()
//返回结果 ["c", "b", "a"]
//返回结果 a: ["c", "b", "a"]
8. indexOf(item,start) 返回某个指定的字符串值在数组中-首-次出现的位置。
item: 必须。查找的元素。
start : 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到arr.length - 1。如省略该参数,则将从字符 串的首字符开始检索。
lastIndexOf : 返回字符串最后出现的位置。
var a=["a","b","c","a","mm","1"]
a.indexOf("a")
//返回 0
a.indexOf("c")
//返回2
a.lastIndexOf("a")
//返回3
a.indexOf("1")
//返回5
a.indexOf(1)
//返回-1
9. forEach()
[].forEach(function(value, index, array) {
// ...
});
10. map() 通过指定函数处理数组的每个元素,并返回处理后的数组.map() 不会改变原始数组。
$scope.mapNum = function(){
var b=[0,2,4,6,8];
var c= b.map(function (val,index,arr) {
return val / 2;
},this);
console.log(b);//返回 [0, 2, 4, 6, 8]
console.log(c);//返回 [0, 1, 2, 3, 4]
}
$scope.mapNum();
forEach和map() 的区别在于,forEach() 没有返回值。map 有返回值,可以return 出来。
11. filter() 检测数值元素,并返回符合条件所有元素的数组。 filter() 不会改变原始数组。
every() 检测数值元素的每个元素是否都符合条件。返回true/false。 every() 不会改变原始数组。
如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
如果所有元素都满足条件,则返回 true。
some() 方法用于检测数组中的元素是否满足指定条件。返回true/false。some() 不会改变原始数组。
如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
如果没有满足条件的元素,则返回false。
$scope.forNum = function(){
var b=[0,2,9,6,10,1,66,12];
var a = b.filter(function (val,index,arr) {
return val >10;
},this);
console.log(a);
//输出: [66, 12]
var A = b.every(function (val,index,arr) {
return val >10;
},this);
console.log(A);
//输出:false
var B = b.some(function (val,index,arr) {
return val >10;
},this);
console.log(B);
//输出:true
}
$scope.forNum();
12. reduce()和 reduceRight()
reduce() : 将数组元素计算为一个值(从左到右)。
reduceRight(): 将数组元素计算为一个值(从右到左)。
语法:
array.reduce(function(preValue, currentValue, currentIndex, arr){
}, initialValue)
function(preValue,currentValue, index,arr) :必需。用于执行每个数组元素的函数。
preValue: 必需。初始值, 或者计算结束后的返回值。如果向 reduce 方法提供 initialValue,则在首次调用函数时,previousValue 为 initialValue。
currentValue: 必需。当前元素
currentIndex: 可选。当前元素的索引
arr: 可选。当前元素所属的数组对象。
initialValue:可选。传递给函数的初始值
$scope.forNum = function(){
var arr = [0,1,2,3,4];
var sum= arr.reduce(function (preValue,curValue,index,array) {
console.log(preValue,curValue);
return preValue + curValue;
}); // 10
console.log(sum);
//输出log分别为:1 2,3 3,6 4,10
}
$scope.forNum();
$scope.forNum = function(){
var arr = [0,1,2,3,4];
var sum= arr.reduce(function (preValue,curValue,index,array) {
console.log(preValue,curValue);
return preValue + curValue;
},10); // 20
console.log(sum);
//输出分别为:10 0,10 1,11 2,13 3,16 4,20
}
$scope.forNum();
$scope.forNum = function(){
var arr = [0,1,2,3,4];
var sum= arr.reduceRight(function (preValue,curValue,index,array) {
console.log(preValue,curValue);
return preValue + curValue;
}); // 10
console.log(sum);
//输出分别为:4 3,7 2,9 1,10 0,10
}
$scope.forNum();