首頁  >  文章  >  web前端  >  歸納整理JavaScript數組實例的9個方法

歸納整理JavaScript數組實例的9個方法

WBOY
WBOY轉載
2022-08-25 11:44:202210瀏覽

本篇文章為大家帶來了關於javascript的相關知識,主要介紹了JavaScript數組實例的9個方法,文章圍繞主題展開詳細的內容介紹沒具有一定的參考價值,需要的朋友可以參考一下。

歸納整理JavaScript數組實例的9個方法

【相關推薦:javascript影片教學web前端

##前言

手寫JS原生API在面試中很常見,今天努力工作之餘(摸魚的時候)翻到了MDN文章中關於數組實例方法這部分,正好無聊就手寫幾個實例方法玩玩,複習一下基礎內容,並記錄一下。

歸納整理JavaScript數組實例的9個方法

如果你還不知道數組實例中迭代方法有什麼區別,可以看下面這張圖:

歸納整理JavaScript數組實例的9個方法

map

這個方法會傳回一個新的數組,數組中的每一項都是執行過

map提供的回呼函數結果。

實作程式碼如下:

const map = (array, fun) => {
  // 类型约束
  if (Object.prototype.toString.call(array) !== '[object Array]')
    throw new TypeError(array + ' is not a array')
  if (typeof fun !== 'function') throw new TypeError(fun + ' is not a function')

  // 定义一个空数组,用于存放修改后的数据
  let res = []
  for (let i = 0; i < array.length; i++) {
    res.push(fun(array[i]))
  }
  return res
}
// 测试
let res = map([1, 2, 3], item => {
  return item * 2
})
console.log(res) // [ 2, 4, 6 ]

filter

#這個方法會傳回一個新的數組,數組中的值是滿足

filter提供的回呼函數的值,

實作程式碼如下:

const filter = (array, fun) => {
  // 类型约束
  if (Object.prototype.toString.call(array) !== &#39;[object Array]&#39;)
    throw new TypeError(array + &#39; is not a array&#39;)
  if (typeof fun !== &#39;function&#39;) throw new TypeError(fun + &#39; is not a function&#39;)

  // 定义一个空数组,用于存放符合条件的数组项
  let res = []
  for (let i = 0; i < array.length; i++) {
    // 将数组中的每一项都调用传入的函数,如果返回结果为true,则将结果push进数组,最后返回
    fun(array[i]) && res.push(array[i])
  }
  return res
}
// 测试
let res = filter([1, 2, 3], item => {
  return item > 2
})
console.log(res) // [ 3 ]

some

該方法會判斷陣列中的每一項,如果有一個滿足回呼函數中條件就回傳

true都不滿足則傳回false

實作程式碼如下:

const some = (array, fun) => {
  // 类型约束
  if (Object.prototype.toString.call(array) !== &#39;[object Array]&#39;)
    throw new TypeError(array + &#39; is not a array&#39;)
  if (typeof fun !== &#39;function&#39;) throw new TypeError(fun + &#39; is not a function&#39;)
  let flag = false
  for (let i of array) {
    if (fun(i)) {
      flag = true
      break
    }
  }
  return flag
}
let res = some([1, 2, 3], item => {
  return item > 2
})
console.log(res) // true

every

該方法會判斷陣列中的每一項,如果所有項滿足回呼函數中條件就傳回

true否則回傳false

實作程式碼如下:

const every = (array, fun) => {
  // 类型约束
  if (Object.prototype.toString.call(array) !== &#39;[object Array]&#39;)
    throw new TypeError(array + &#39; is not a array&#39;)
  if (typeof fun !== &#39;function&#39;) throw new TypeError(fun + &#39; is not a function&#39;)
  let flag = true
  for (let i of array) {
    if (!fun(i)) {
      flag = false
      break
    }
  }
  return flag
}
let res = every([1, 2, 3], item => {
  return item > 0
})
console.log(res) // true

reduce

#該方法會讓陣列中的每個元素執行我們提供的回呼函數,並將結果匯總傳回,實作程式碼如下:

const reduce = (array, fun, initialValue) => {
  // 类型约束
  if (Object.prototype.toString.call(array) !== &#39;[object Array]&#39;)
    throw new TypeError(array + &#39; is not a array&#39;)
  if (typeof fun !== &#39;function&#39;) throw new TypeError(fun + &#39; is not a function&#39;)
  let accumulator = initialValue
  for (let i = 0; i < array.length; i++) {
    accumulator = fun(accumulator, array[i], i, array)
  }
  return accumulator
}
const arr = [1, 2, 3]
console.log(arr.reduce(v => v + 10, 10)) // 40
console.log(reduce(arr, v => v + 10, 10)) // 40

forEach

這個方法比較簡答了,就是遍歷陣列方法,陣列中的每一項都執行回呼函數,實作程式碼如下:

const forEach = (array, fun) => {
  // 类型约束
  if (Object.prototype.toString.call(array) !== &#39;[object Array]&#39;)
    throw new TypeError(array + &#39; is not a array&#39;)
  if (typeof fun !== &#39;function&#39;) throw new TypeError(fun + &#39; is not a function&#39;)

  for (let i of array) {
    fun(i)
  }
}
let res = forEach([1, 2, 3], item => {
  console.log(item)
})

find和findIndex

這兩個方法比較類似,一個回傳元素,一個傳回元素的索引,這裡就寫一個,實作程式碼如下:

const myFind = (array, fun) => {
  // 类型约束
  if (Object.prototype.toString.call(array) !== &#39;[object Array]&#39;)
    throw new TypeError(array + &#39; is not a array&#39;)
  if (typeof fun !== &#39;function&#39;) throw new TypeError(fun + &#39; is not a function&#39;)
  let res
  for (let i = 0; i < array.length; i++) {
    if (fun(array[i])) {
      res = array[i]
    }
  }
  return res
}
// 测试
let res = myFind([1, 2, 3], item => {
  return item > 2
})
console.log(res) // 3

join

該方法可以將陣列中的所有元素根據指定的字串進行拼接,並傳回拼接後的字串,

實作程式碼如下:

const join = (array, separator = &#39;,&#39;) => {
  // 类型约束
  if (Object.prototype.toString.call(array) !== &#39;[object Array]&#39;)
    throw new TypeError(array + &#39; is not a array&#39;)
  if (typeof separator !== &#39;string&#39;)
    throw new TypeError(separator + &#39; is not a string&#39;)
  let res = array[0].toString()
  for (let i = 0; i < array.length - 1; i++) {
    res += separator + array[i + 1].toString()
  }
  return res
}
// 测试
let res = join([1, 2, 3], &#39;-&#39;)
console.log(res) // 1-2-3

【相關推薦:

javascript影片教學web前端#

以上是歸納整理JavaScript數組實例的9個方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除