
输入 :一个二维数组,例如:
[ [1,2,3] , [4,5,6] , [7,8,9] ]
输出 :二维数组的转置
[ [1,4,7] , [2,5,8] , [3,6,9] ]
矩阵的转置就是行列互换
function arrayT(sArray){
var tArray = [];
//对目标数组初始化
for(var i = 0; i < sArray[0]length; i++){
tArray[i] = [];
}
//转置数组
for(var i = 0; i < sArraylength; i++){
for(var j = 0; j < sArray[i]length; j++){
tArray[j][i] = sArray[i][j];
}
}
return tArray;
}
注:
这是一道本人经历的面试题,题目要求是给一个字符串,"abc def ghi",输出为"adg beh cfi"。
通过这个面试题,我想到了数组的转置 *** 作。
该题是在数组转置的基础上,我想到了之前leetcode上的一道题目,就重温一下。
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
输入:
[
[ 1 , 2 , 3 ] ,
[ 4 , 5 , 6 ] ,
[ 7 , 8 , 9 ]
]
输出:
[ 1 , 2 , 3 , 6 , 9 , 8 , 7 , 4 , 5]
其实是相当于每次遍历完外圈,然后遍历内圈;
我们可以把遍历每一圈作为一个完整的事件,然后不断去重复遍历每一圈就可以解决这个问题。
其实就是递归的运用。
arr => {
// map函数用来完成当前矩阵最外一圈的遍历
// 二维数组 arr 表示当前矩阵
// 一维数组 result 用来保存遍历结果
let map = (arr, result) => {
// 矩阵的高度即行数
let n = arrlength
// 遍历矩阵的每一行
for(let i = 0; i < n; i++){
// 若第一行 按顺序插入
if(i === 0){
result = resultconcat(arr[i])
} else if (i === n-1){
// 若最后一行 倒序插入
result = resultconcat(arr[i]reverse())
} else {
// 若中间行 插入该行最后一个元素 并将该元素从矩阵中删除
resultpush(arr[i]pop())
}
}
// 将已经遍历的第一行和最后一行从矩阵中删除
arrpop()
arrshift()
// 遍历插入最左侧一列 此时删除首位两行后矩阵高度已变为n-2
for(let j = n - 3; j >= 0; j--){
// 避免arr[j]长度为空时插入undefined
if(arr[j]length){
resultpush(arr[j]shift())
}
}
// 截止条件 矩阵有元素就继续递归
if(arrlength){
// 把已将遍历元素删除的矩阵进行递归
return map(arr, result)
}else{
return result
}
}
// 将初始矩阵传入, 保存结果的数组初始为空
return map(arr, [])
}
原始数据:数组中有三个关于的对象数据
需求:需要根据评分(rating)的高低,按倒序排列,即评分越高,越靠前
错误示范一:
个人想法:把当前值赋给下一个值,再把下一个值赋给当前值,理论上来说没问题的。但是
结果:
错误示范二:
结果:评分都覆盖了,变为一组数据了
正确示范一:
结果:
正确示范二(es6解构赋值写法):
结果:
正确示范三:sort排序(注意这样是返回的新数组,而不是修改原数组)
返回值是负数,意味着不交换位置,返回值是正数交换位置,0的话,值是相等的,也就不存在交换一说了
结果:
正确示范四:sort排序(注意这样是返回的新数组,而不是修改原数组)
直接返回a-b的结果,a大于b,即返回正数交换,a小于b,即返回负数不交换,这样得到的数据是反的,即分数越高,排名越靠后,通过翻转得到正确的数据
或者返回b-a的结果就是正确的
结果:
如上就是根据需求交换数组数据实现排序的方法。
如有问题,请指出,接受批评。
在Js Array中的方法大致分为两类:方法改变原数组 & 方法生成新数组(不改变原数组)1push():向原数组的最后一位添加一个元素。返回数组长度
2unshift():向原数组的最前添加一个元素。返回数组长度
3pop():截取数组中最后一个元素。返回被截取的元素
4shift():截取数组中第一个元素。返回被截取的元素
以上四个方法可以放在一起记忆,不要被方面名所误导。
5splice():splice(index, howmany, item1,itemX) 方法有多个参数可选,常用于分割数组。返回处理后的数组
第一个参数:从第n个元素的下标开始截取;
第二个参数:从第n个元素的下标开始截取多少个元素;
第三到n个参数:将截取的元素替换为什么
6sort():sort(fn) 方法有一个参数可选,用于给数组排序。在不写参数的情况下会对数组中的元素进行从小到大的顺序排序。但不会识别数字(按照数字ACSLL编码表进行排序)
可选参数:参数返回一个函数,这个函数中有两个形参 sort(function(a, b){}) 。形参中的a和b会类冒泡的访问数组中的元素;例:[1, 2, 3, 4] a b 分别会选择 1,2、 1,3 、 1,4 、 2,3 、 2,4 、 3,4。当a-b>1时,交换ab的值;当a-b<1时,不动。由此,可在此函数体中写出自定义的排序规则。返回排序后的数组
7reverse():倒序排列整个数组。返回数组
1concat():concat(arr)将两个数组拼接在一起。返回新数组
2join():join('str')一个可选参数,返回以一个字符串将数组中的元素拼接成字符串。与str的split('str')方法相反,split()是将字符串以一个字符串拆分成数组。
3toString():与join()函数不填写参数一样,返回一个一 逗号 ,拼接的字符串。
4slice():选取数组中的第n个元素到第n个元素。返回新数组,也可不写参数返回数组的副本。
5indexOf():index(item, start)方法有两个参数。返回指定元素在数组中的索引值;如果未找到指定元素,返回 -1
第一个参数:指定的元素
第二个参数:从填入的索引开始寻找数组转换字符串
arrayjoin() // 将数组的值拼接成字符串。
var arr = [1,2,3,4,5]
arrjoin() // 不传参数,默认按,进行拼接
arrjoin("-") // 参数是字符串类型 按-进行拼接
数组的增删 *** 作
arraypush(value,[value[,]]) //将一个或多个元素添加到数组的结尾,并返回新的长度。
arraypop() //从数组中删除最后一个元素,并返回该元素的值,改变了数组的长度
arrayunshift(value,[value[,]]) //将一个或多个元素添加到数组的开头,并返回新的长度。
arrayshift() //从数组中删除第一个元素,并返回该元素的值,改变了数组的长度
数组的翻转与排序
arrayreverse() // 翻转数组,返回翻转过的数组
arraysort() // 默认排序顺序是根据字符串Unicode码点,比如如果是数字的话,排序结果是10小于2,因为比较的是第一位
var arr = [1,3,10,2,4,40,5]
arrsort() // [1, 10, 2, 3, 4, 40, 5]
// sort方法可以传递一个函数作为参数,这个参数用来控制数组如何进行排序
var arr = [1,2,10,4,40,5]
arrsort(function(a,b)
return a-b; //按照正序
return b-a //按照倒序
})
数组的拼接与截取
concat:数组合并,不会影响原来的数组,会返回一个新数组。
var arr = [1,2,3]
var arr1 = ["a","b","c"]
var newArray = arrconcat(arr1) //[1,2,3,"a","b","c"];
slice:复制数组的一部分到一个新数组,并返回这个新数组,原来的数组不受影响,包含头,不包含尾
var newArray = arrayslice(begin, end)
var arr = [1,2,3,4,5]
arrslice(0,3) //[1,2,3]
arrslice(-3,-1) //[3,4]
splice: 以新元素来替换旧元素,以此来修改数组的内容,返回被替换的内容,原数组被改变
start:开始位置 deleteCount:删除的个数 items:替换的内容
arraysplice(start, deleteCount, [items[,items])
var arr = [1,2,3,4,5]
var newArray = arrsplice(0,3,"a","b","c","d")
consolelog(newArray) //[1, 2, 3]
consolelog(arr) // ["a", "b", "c", "d", 4, 5]
数组查找元素
indexOf方法用来查找数组中某个元素第一次出现的位置,如果找不到,返回-1
arrayindexOf(search, [fromIndex])
lastIndexOf()从后面开始查找数组中元素第一次出现位置,如果找不到,返回-1
arraylastIndexOf(search, [fromIndex])
链接:>(水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数。水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身 例如: 1~3 + 5~3 + 3~3 =153)
(质数就是在大于1的自然数中,除了1和它本身以外不在有其他因数的自然数)
a:11,b:10
A [] B [""] C [undefined] D [null]
A ['false'] B [false] C[0] D[]
A null B undefined C “hello” D“world”
A "llowo" B "llow" C "llo" D null
A "llowo" B "llow" C "llo" D null
A getYear()
B getMonth()
C getDay()
DgetDate()
A 基于对象
B 移动端优先
C 事件驱动
D 跨平台
A String
B Float
C Number
D Null
A 任意单个字符
B 任意单个字母
C 任意单个字母、数字、下划线
D 任意单个字母、数学、下划线、$符号
A <javascript>
B <script>
C <scripting>
D <js>
A var s = 'heloe'
B var n = 20
C var x = documentgetElementsByTagName('box')
D var y = documentquerySelectorAll('ul li')
A documentcreateElement
B documentcreateTextNode
C documentgetElementById
B documentquerySelector
A eleinnerText
B eleinnerHTML
C eletextContent
D elehtmlContent
插入排序的算法描述的是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到对应位置并插入
A对数组里数据的排序可以用sort函数,如果排序效果非预期,可以给sort函数加一个排序的参数
Breverse用于对数组数据的倒序排列
C向数组的最后位置加一个新元素,可以用pop方法
Dunshift方法用于向数组删除第一个元素
Awindowstatus = "已经选中该文本框"
Bdocumentstatus = '已经选中该文本框'
Cwindowscreen = '已经选中该文本框'
Ddocumentscreen = '已经选中该文本框'
A <input type="button" value="new" onclick="open('newhtml','_blank')" />
B <input type="button" value="new" onclick="windowlocation = 'newhtml'" />
C<input type="button" value="new " onclick = "locationassign('newhtml)">
D <form target = "_blank" action="newhtml">
<input type="submit" value="new" />
</form>
A<script type="text/javascript">documentwrite(<h1>hello</h1>)</script>
B<script type="text/javascript">documentwrite("<h1>hello</h1>")</script>
C<script type="text/javascript"><h1>hello</h1></script>
D<h1><script type="text/javascript">documentwrite("hello")</script></h1>
以下说法中正确的是(AD)
A在页面的第二个文本框中输入内容后,当目标离开第二个文本框时,第一个文本框的内容不变
B在页面的第一个文本框中输入内容后,当鼠标离开第一个文本框时,将在第二个文本框中复制第一个文本框的内容
C在页面的第二个文本框中输入内容后,当鼠标离开第二个文本框时候,将在第一个文本框中复制第二个文本框的内容
D在页面的第一个文本框中输入内容后,当鼠标离开第一个文本框时,第二个文本框的内容不变
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)