为什么我要放弃javaScript数据结构与算法(第二章)—— 数组 (2)

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]; every

every 会迭代数组中的每个元素,直到返回 false。

number.every(isEven)

在这个例子中,数组number第一个元素是1,不是2的倍数,因此 isEven 函数返回false,然后 every 执行结束。

some

some 方法和 every 相似,不过some方法会迭代数组中的每个元素,直到函数返回true

number.some(isEven)

这个例子中,数组的第二个参数是2,为2的倍数,因此返回true,迭代结束

forEach

如果要迭代整个数组可以用 forEach 方法,和使用 for 循环相同:

number.forEach(function(x){ console.log((x % 2 == 0)); }); map & filter

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfwyw.html