面试题:
var arr = [
[1,2,3],
[4,5,6],
[7,8,9]
]
// 数组L型输出 输出顺序为 1 4 7 8 9 2 5 6 3
// 相当于根据 arr数组创建一个值为[1,4,7,8,9,2,5,6,3]的新数组
首先L型,顾名思义,就是左边一竖加底部一横,那么我们先把数组中的竖和横弄出来
- 第一个L就是arr中每个数组的第一个下标(0) (一竖)到末尾的整个数组(一横)。
[
[1,2,3],
[4,5,6],
[7,8,9]
]
[
[1],
[4],
[7, 8, 9]
]
var a = arr[0][0]
var b = arr[1][0]
var c = arr[2][0]
var d = arr[2][1]
var e = arr[2][2]
// [a,b,c,d,e] ==> [1,4,7,8,9]
- 第二个L就是去掉第一个L数据后剩下数组的第一个下标(一竖)到末尾的整个数组(一横)。
[
[2,3],
[5,6]
]
[
[2],
[5, 6]
]
var f = arr[0][1]
var g = arr[1][1]
var h = arr[1][2]
// [f,g,h] ==> [2,5,6]
- 第三个L已经没有了,剩下最后一个数。这里把他当成一竖
[
[3]
]
var i = arr[0][2]
// [i] ==> [3]
- 我们首先把每个竖拿出来。
// 第一个竖
var a = arr[0][0]
var b = arr[1][0]
var c = arr[2][0]
// 第二个竖
var f = arr[0][1]
var g = arr[1][1]
// 第三个竖
var i = arr[0][2]
- 上面(列表4.)代码中我们看到每个竖的第一位下标的规律是
// 第一个竖第一个下标
var a = arr[0] //[0]
var b = arr[1] //[0]
var c = arr[2] //[0]
// 第二个竖第一个下标
var f = arr[0] //[1]
var g = arr[1] //[1]
// 第三个竖第一个下标
var i = arr[0] //[2]
第一个竖的第一个下标分别为 0 1 2 第二个竖的第一个下标分别为 0 1 第三个竖的第一个下标分别为 0
相信大部分人都能写出一个这样的循环吧,下面这个循环输出的直分别为每个竖的第一个下标
var length = 3; // 后面将替换成 arr.length
for(var i= length; i > 0; i--){
for(var j = 0; j < i; j++){
console.log(j)
}
}
// 输出顺序 ⇒ 0 1 2 0 1 0
- 上面(列表4.)代码中我们观察竖的第二个下标的顺序为 0 0 0 1 1 2
// 第一个竖第二个下标
var a = arr[0] [0]
var b = arr[1] [0]
var c = arr[2] [0]
// 第二个竖第二个下标
var f = arr[0] [1]
var g = arr[1] [1]
// 第三个竖第二个下标
var i = arr[0] [2]
我们把上面的循环拿下来,然后用arr数组的长度减去i,输出的顺序刚好就和我们的第二个下标一致
var length = 3; // 后面将替换成 arr.length
for(var i= length; i > 0; i--){