1. 程式人生 > 其它 >前端筆試題簡單積累——入門

前端筆試題簡單積累——入門

查詢兩個節點的最近的一個共同父節點,可以包括節點自身

輸入描述:

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 為出現頻率

  1. 不限制 key 的順序

  2. 輸入的字串引數不會為空

  3. 忽略空白字元

示例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
}