splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。 splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。
语法
arrayObject.splice(index,howmany,item1,.....,itemX)例子
var number = [1,2,3,4]; number.splice(2,0,4,4,5); // [] number //[1, 2, 4, 4, 5, 3, 4] number.splice(2,5,7); // [4, 4, 5, 3, 4] number //[1, 2, 7] 二维或者多维数组我们知道如果要记录数天内每个小时的气温,可以使用数组来保存这些数据。那么要保存两天每小时气温的数据的时候可以这样。
var averageTemp1 = [32,53,45,23,46,53]; var averageTemp2 = [98,32,74,34,63,73];然而这不是***的方法。可以使用矩阵(二维数组)来存储这些信息。矩阵的行保存每天的数据,列对应小时级别的数据。
var averageTemp = []; averageTemp[0] = [32,53,45,23,46,53]; averageTemp[1] = [98,32,74,34,63,73];JavaScript只支持一维数组,并不支持矩阵。但是,可以用数组套数组来模拟矩阵或者任一多维数组。
迭代二维数组的元素如果想看到这矩阵的输出,可以创建一个通用函数,专门输出其中的值:
function printMatrix(x){ for(var i = 0; i < x.length; i++){ for(var j = 0; j< x[i].length; j++){ console.log(x[i][j]); } } } printMatrix(averageTemp); 多维数组我们也可以用这种方式来处理多维数组。假如我们要创建一个3x3x3的矩阵,每一个格子里包含矩阵的i(行)、j(列)、z(深度)之和:
var matrix3x3x3 = []; for(var i = 0; i < 3; i++){ matrix3x3x3[i] = []; for(var j = 0; j < 3; j++){ matrix3x3x3[i][j] = []; for(var z = 0; z < 3; z++){ matrix3x3x3[i][j][z] = i+j+z; } } }数据结构中有几个维度都没有关系,都可以用循环遍历每个维度来访问所有格子
for(var i = 0; i < matrix3x3x3.length; i++){ for(var j = 0; j< matrix3x3x3[i].length; j++){ for(var z = 0; z < matrix3x3x3[i][j].length; z++){ console.log(matrix3x3x3[i][j][z]); } } }如果是一个3x3x3x3的矩阵,代码中就会用四层嵌套的 for 语句,以此类推。
JavaScript 的数组方法参考在JavaScript里,数组是可以修改的对象。这意味着创建的每一个数组都有一些可用的方法。
下面表格是数组的一些核心方法。
方法名 描述concat 连接2个或者更多数组,并返回结果
every 对数组中的每一项运行给定函数,如果该函数对每一项都但返回true,则返回true
filter 对数组中度过每一项运行给定函数,返回该函数会返回true的项组成分数组
forEach 对数组中更多每一项运行给定函数,这个方法没有返回值
join 将所有的数组元素连接成一个字符串
indexOf 返回第一个与给定参数相等的数组元素的索引,没有找到则返回-1
lastIndexOf 返回在数组中搜索到的与给定参数相等的元素的索引里最大的值
map 对数组中的每一项运行给定函数,返回每次函数调用结果组成的数组
reverse 颠倒数组中的元素的顺序,原先第一个元素现在变成了最后一个,同样原先的最后一个元素变成了现在的第一个
slice 传入索引值,将数组里对应索引范围内的元素作为新数组返回
some 对数组中每一项运行给定函数,如果任一项返回true,则返回true
sort 按照字母的顺序对数组排序,支持传入指定排序方法的函数作为参数
toString 将数组作为字符串返回
valueOf 和 toString 相似,将数组作为字符串返回
数组合并
有多个数组,需要合并起来成为一个数组。我们可以迭代各个数组,然后把每个元素加入最终的数组。
JavaScript也有提供相对应的方法 concat()
var a = 0; var b = [1,2,3]; var c = [-3,-2,-1]; var s = c.concat(a,b); s // [-3, -2, -1, 0, 1, 2, 3] 迭代器函数有时候,我们需要迭代数组中的元素。可以使用循环语句(前面提到的for语句等)。而其实 JavaScript 内置了许多数组可以使用的迭代方法。
对于本节的例子,我们需要函数和数组。假如有一个数组,值是从1到15,如果数组里面的元素可以被2整除(偶数),函数就要返回true,否则就返回false:
var isEven = function(x){ // 如果是 2的倍数,就返回 true return (x % 2 == 0); } var number = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; everyevery 会迭代数组中的每个元素,直到返回 false。
number.every(isEven)在这个例子中,数组number第一个元素是1,不是2的倍数,因此 isEven 函数返回false,然后 every 执行结束。
somesome 方法和 every 相似,不过some方法会迭代数组中的每个元素,直到函数返回true
number.some(isEven)这个例子中,数组的第二个参数是2,为2的倍数,因此返回true,迭代结束
forEach如果要迭代整个数组可以用 forEach 方法,和使用 for 循环相同:
number.forEach(function(x){ console.log((x % 2 == 0)); }); map & filter