前端筆試題簡單積累——入門
查詢兩個節點的最近的一個共同父節點,可以包括節點自身
輸入描述:
oNode1 和 oNode2 在同一文件中,且不會為相同的節點
function commonParentNode(oNode1, oNode2) {
for(;oNode1;oNode1=oNode1.parentNode){
if(oNode1.contains(oNode2)){
return oNode1
}
}
}
心得:
for迴圈的語法
for(語句1;語句2;語句3){
被執行程式碼塊
}
其中三個語句都是可以省略的 參考https://www.runoob.com/js/js-loop-for.html
parentNode:返回元素的父節點,如果沒有父節點,返回Null
contains:紅寶書的描述中是確定一個元素是不是另一個元素的後代,引數是待確定的目標節點。
contains不是字串方法,是僅用於判斷DOM元素的包含關係,引數是Element型別
<script>
var a = "1234"
var b = "12"
alert(a.contains(b));
</script>
斐波那契數列
輸入描述:用 JavaScript 實現斐波那契數列函式,返回第n個斐波那契數。 f(1) = 1, f(2) = 1 等
function BO(n) {
if (n == 0) {
return 0
} else if (n == 1) {
return 1
} else {
return BO(n - 1) + BO(n - 2)
}
}
字串字元統計
描述
統計字串中每個字元的出現頻率,返回一個 Object,key 為統計字元,value 為出現頻率
-
不限制 key 的順序
-
輸入的字串引數不會為空
-
忽略空白字元
示例1
輸入:
'hello world'
輸出:
{h: 1, e: 1, l: 3, o: 2, w: 1, r: 1, d: 1}
解1:
function count(str) {
var obj={}
str=str.replace(/\s/g,'')
for(let i=0; i<str.length; i++){
if(obj.hasOwnProperty(str[i])){
obj[str[i]]++
}
else obj[str[i]]=1
}
}
解2:
function count(str){
var str1={}
str=str.replace(/\s/g,'')
str=str.split('')
str1=str.reduce((prve,cur)=>{
prve[cur]?prve[cur]++:prve[cur]=1;
return prve
},{})
console.log(str1)
}
count('sda dasdsa dasdas d')
心得:
1、replace: 方法用於在字串中用一些字元替換另一些字元,或替換一個與正則表示式匹配的子串。
2、這裡用於去除空字串用到了正則表示式: /\s/g
3、hasOwnProperty: 方法會返回一個布林值,指示物件自身屬性中是否具有指定的屬性(也就是,是否有指定的鍵)
4、split: 方法用於把一個字串分割成字串陣列。
5、reduce的語法
arr.reduce(function(prev,cur,index,arr){
...
}, init);
arr 表示原陣列;
prev 表示上一次呼叫回撥時的返回值,或者初始值 init;
cur 表示當前正在處理的陣列元素;
index 表示當前正在處理的陣列元素的索引,若提供 init 值,則索引為0,否則索引為1;
init 表示初始值。
reduce有很多種用法,累加、字串統計等等,後續用到會補充。
陣列求和
描述:
計算給定陣列 arr 中所有元素的總和
輸入描述:
陣列中的元素均為 Number 型別
輸入:
[ 1, 2, 3, 4 ]
複製
輸出:
10
解:
function sum(arr) {
var arr1=0
arr1=arr.reduce((prev,cur)=>{
return prev+cur
},0)
console.log(arr1)
}
sum([1,2,3,4])
還有其他方法,不舉出列子
刪除陣列最後一個元素
描述:
刪除陣列 arr 最後一個元素。不要直接修改陣列 arr,結果返回新的陣列
輸入:
[1, 2, 3, 4]
複製
輸出:
[1, 2, 3]
function truncate(arr) {
var arr1=[]
arr1=arr.slice(0,arr.length-1)
return arr1
}
心得:
slice: 我的理解是選擇原陣列的一些值,不會改變原陣列,會建立新陣列。
新增元素
描述:
在陣列 arr 開頭新增元素 item。不要直接修改陣列 arr,結果返回新的陣列
輸入:
[1, 2, 3, 4], 10
複製
輸出:
[10, 1, 2, 3, 4]
解1
function prepend(arr, item) {
var arr1=arr.slice(0)
arr1.unshift(item)
return arr1
}
解2
function prepend(arr, item) {
return [item,...arr]
}
刪除陣列第一個元素
描述
刪除陣列 arr 第一個元素。不要直接修改陣列 arr,結果返回新的陣列
輸入:
[1, 2, 3, 4]
輸出:
[2, 3, 4]
function curtail(arr) {
var arr1=arr.slice(0)
arr1.shift(0)
return arr1
}
求二次方
描述:
為陣列 arr 中的每個元素求二次方。不要直接修改陣列 arr,結果返回新的陣列
輸入:
[1, 2, 3, 4]
輸出:
[1, 4, 9, 16]
解1:
function square(arr) {
var arr1=[]
arr.forEach((a)=>{
arr1.push(a*a)
})
return arr1
}
解2
function square(arr) {
var arr1=[]
arr1=arr.reduce((prev,cur)=>{
prev.push(cur*cur)
return prev
},[])
return arr1
}