JS数组
如何创建数组,
数组元素的读和写
数组元素的的length属性
1.创建数组
使用Array构造函数
语法:new Array()
new 是创建新建的意思
小括号()说明:
(1)预先知道数组要保存的项目数量
(2)向Array()构造函数中传递数组应包含的项
使用数组字面量表示法
var colors = new Array(3);
console.log(colors)
var nums = new Array(1,3,6,9);
console.log(nums)
var cl = ["red", "yellow", "black"];
console.log(cl);
var infos = [6, "marry", true, {email:"email@marry.com"}];
console.log(infos)
第二种创建数组元素的读写
读取和设置时,使用方括号[],并且提供相应的索引
说明,索引是从0开始的正整数
var cl = ["red", "yellow", "black"];
console.log(cl[1]); //读取cl这个数组中索引为1的值
向数组中添加值
var colors = new Array(3);
colors[0]="#foo";
colors[1]="#ofo";
console.log(colors)
数组的长度
array.length
1.获取数组array的长度,通过设置length可以从数组的末尾移除项或向数组中添加新项
2.把一个值放在超出当前数组大小的位置上时,会重新计算数组
长度值,长度值等于最后一项索引加1.
数组的遍历
var arr=["a", "b", "c", "d"];
for(var i=0; i<arr.length; i++){
console.log(arr[i]);
}
数组的栈方法
1.push() 语法arrayObject.push(newele1, newele2, ..,newelex)
功能:把它的参数顺序添加到arrayObject的尾部
返回值:把指定的值,添加到数组后的新长度
var colors = new Array("red", "yellow");
var lens = colors.push("blue", "hehehaha");
console.log(lens)
console.log(colors);
console.log(colors.length);
2.unshift()
语法arrayObject.unshift(ne1,ne2,ne3,...,n3n)
功能:
把它的参数顺序添加到arrayObject的开头
返回值:
把指定的值添加到数组后的新长度
var nums = [1,2,3,4,5];
var size = nums.unshift(6,7);
console.log(size); .//7
console.log(nums); //(7) [6, 7, 1, 2, 3, 4, 5]
3.pop()
arrayObject.pop()
功能:
删除arrayObject的最后一个元素
返回值:
被删除的那个元素
4.shift()
arrayObject.shift()
功能:
删除arrayObject中的第一个元素
返回值:
被删除的那个元素
数组的转换方法,
语法:
arrayObject.join(separator)
功能:
用于把数组中的所有元素放入一个字符串。
返回值:
字符串
var nums = [1,2,3,4,5];
var st = nums.join()
console.log(st) //1,2,3,4,5
console.log(typeof st) //string
var words = ["border", "left", "color"];
var wa = words.join('-')
console.log(wa); //string
console.log(typeof wa) //border-left-color
数组的重新排序方法
stringObject.reverse()
功能:
用于颠倒数组中元素的顺序
返回值:数组
var nums = [1,2,3,4,5];
console.log(nums) // [1,2,3,4,5];
nums.reverse()
console.log(nums) // [5, 4, 3, 2, 1]
var stt = ["a", "b", "c", "d"]; 要求返回"dcba"
s = stt.reverse()
console.log(stt) // ["d", "c", "b", "a"]
ss = s.join("")
console.log(ss) //dcba
还是排序
arrayObject.sort(sortby)
功能:
用于对数组的元素进行排序
返回值:数组
说明:1.即使数组中的每一项都是数值,sort()方法比较的也是字符串,这是因为sort这个方法,是把数组中每一个元素都调用了一下toString方法,把元素转换成字符串,在比较
2.sort()方法可以接受一个比较函数作为参数
var words = [9,23,15,88,12];
console.log(words.sort())// [12, 15, 23, 88, 9],
sort自动转换成字符串,所以才会造成这样的结果
//降序
var ss = words.sort(function(a,b){return b-a});
console.log(ss)//[88, 23, 15, 12, 9]
console.log(words)
//升序
var bb = words.sort(function(a,b){return a-b});
console.log(bb)
console.log(words)// [9, 12, 15, 23, 88]
不管升序还是降序都是在原来的数组中做的变换,不会重新生出来一份数组
数组的操作方法
concat()
arrayObject.concat(arrayX,arrayX,...,arrayX)
功能:
用于连接两个或多个数组。
返回值:数组
var arr1 = ["a", "b", "c"],
arr2 = ["d", "e", 2, 3],
arr3;
//concat
arr3=arr1.concat(arr2);
console.log(arr3)
["a", "b", "c", "d", "e", 2, 3]
slice(),这里我刚开始的时候是懵逼的
arrayObject.slice(start, end)
功能:从已有的数组中返回选定的元素
参数:
start(必选)规定从何处开始选取,如果是负数,从数组尾部开始算起
end(可选)规定从何处结束选取,是数组片段结束的数组下标
start和end指的是数组中索引值
截取从start和end(不包含改该元素),即从start和end-1的元素
var arr1 = ["a", "b", "c", "e", "f"];
var newColors = arr1.slice(1,);
console.log(newColors);//["b", "c", "e", "f"]
var cc = arr1.slice(1,2)//b
关于数组面试题
// 完成以下代码段,实现b数组对a数组的拷贝
var arr = [1, "yes", 3],
b;
// 1.数组遍历,push
b = new Array();
for(var i=0; i<=arr.length;i++){
b.push(a[i]);
}
console.log(b);
//2.concat()
b = [].concat(a)
console.log(b)
//3.slice()
b = a.slice(0);
console.log(b)
数组中splice()方法删除数组项,插入数组项,替换数组项
语法:
arrayObject.splice(index,count)
功能:
删除从index处开始的零个或多个元素
返回值:
含有被删除的元素的数组
count是要删除的项目数量,如果设置为0,则不会删除项目
如果不这只,则删除从index开始的所有值
var arr = ["a", "b","c","d", "e", "f"];
console.log(arr);
var delarr = arr.splice(2,2)//从索引2开始删除2个数值
var darr = arr.splice(2,0)//不删除
var a = arr.splice(2)
console.log(delarr);//["c", "d"]
console.log(darr)//[]
console.log(a)//["c", "d", "e", "f"] 表示删除从2开始的所有数值
arrayObject.splice(index,0,item1,...,itemx)
功能:
在指定位置插入值
参数:
Index:起始位置
0:要删除的项数
item1,...itemx:要插入的项
返回值:数组
需求是在b的位置插入 m,n
var arr = ["a", "b","c","d", "e", "f"];
console.log(arr); // ["a", "b", "c", "d", "e", "f"]
var insertArr=arr.splice(2,0, "m", "n");
console.log(insertArr); //[]
console.log(arr); //["a", "b", "m", "n", "c", "d", "e", "f"]
由此可以得出,用splice插入元素时,会改变原来的数组,
在原来的数组中做操作,而不是重新复制一份数组
splice数组替换
语法:arrayObject.splice(index, count, item1,...,itemx)
功能:
在指定位置插入值,且同时删除任意数量的项(元素)
参数:
Index:起始位置
count:要删除的项目(元素的数量)
返回值:从原来数组中删除的项(元素的数量)如果没有删除任何项,则返回空数组
需求是把b,c换成x,y
var arr = ["a", "b", "c", "d"];
console.log(arr);//["a", "b", "c", "d"]
var replacearr = arr.splice(1,2,"x","y");
console.log(replacearr);//["b", "c"]
console.log(arr)//["a", "x", "y", "d"]
indexof()
lastindexof()
为数组实例添加
语法:
arrayObject.indexOf(searchvalue, startindex)
功能:
从数组的开头开始(位置0)开始向后查找
参数:
searchvalue:必须,要查找的项, 不写startIndex的话默认是从零开始查找的,
startIndex:可选,起点位置的索引,就是从哪里开始查找
返回值:
number,查找的项在数组中的位置,没有找到的情况下返回-1
var nums = [1,2,3,4,5,6,8,9,10];
var p = nums.indexOf(6);//索引从零开始,6的索引正好是5
var pos = nums.indexOf(66);
console.log(p);
console.log(pos)//nums数组中没有66,返回-1
lastindexof是从末尾开始查找的不是开头
lastindexof()
为数组实例添加
语法:
arrayObject.indexOf(searchvalue, startindex)
功能:
从数组的开头开始(位置0)开始向后查找
参数:
searchvalue:必须,要查找的项, 不写startIndex的话默认是从零开始查找的,
startIndex:可选,起点位置的索引,就是从哪里开始查找
返回值:
number,查找的项在数组中的位置,没有找到的情况下返回-1
新增数组元素的时候跟python新增字典很像
2. 新增数组元素 修改索引号 追加数组元素
var arr1 = ['red', 'green', 'blue'];
arr1[3] = 'pink';
console.log(arr1);
arr1[4] = 'hotpink';
console.log(arr1);
arr1[0] = 'yellow'; // 这里是替换原来的数组元素
console.log(arr1);