日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ES5-16【utils】数组方法、类数组

發(fā)布時(shí)間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ES5-16【utils】数组方法、类数组 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

數(shù)組方法

concat

  • 返回值是拼接后的數(shù)組

toString

  • 將數(shù)組轉(zhuǎn)成字符串,用逗號(hào)隔開(kāi)

slice(a,b) [a,b)

  • 不傳值,拷貝了一份
  • 不傳b,截取到最后一位
  • 傳b,截取到b之前的那位
  • a/b是負(fù)數(shù)(和splice一樣,最后一位是-1

join

  • 不傳參數(shù)相當(dāng)于toString!用逗號(hào)連接
  • 傳空字符串,去除逗號(hào)

split(a,b) - (字符串方法)

  • 不傳值,會(huì)將整個(gè)字符串放進(jìn)數(shù)組
  • 第二個(gè)參數(shù)b,是用a分割后截取b位

類數(shù)組

  • 函數(shù)的實(shí)參arguments
  • dom數(shù)組
  • 沒(méi)有數(shù)組方法,因?yàn)闆](méi)有繼承Array.prototype,繼承Object.prototype
  • 類數(shù)組的原型
function test() {console.log(arguments)console.log(arguments.toString()) } test(1, 2, 3)

  • 改變?cè)?/li>
function test() {console.log(arguments)arguments.__proto__ = Array.prototypeconsole.log(arguments.toString()) } test(1, 2, 3)

  • 對(duì)象轉(zhuǎn)類數(shù)組:給對(duì)象加splice屬性,對(duì)象的原型依然是Object.prototype
function test() {console.log(arguments) } test(1, 2, 3) var obj = {'0': 1,'1': 2,'2': 3,'length': 6 } console.log(obj)

function test() {console.log(arguments) } test(1, 2, 3) var obj = {'0': 1,'1': 2,'2': 3,'length': 3,'splice': Array.prototype.splice } console.log(obj)

  • 調(diào)用對(duì)象上添加的方法
var obj = {'0': 1,'1': 2,'2': 3,'length': 3,'splice': Array.prototype.splice } console.log(obj.splice(3, 0, 4)) console.log(obj) console.log(Object.prototype.toString.call(obj)) obj['push'] = Array.prototype.push console.log(obj.push(5)) console.log(obj) console.log(Object.prototype.toString.call(obj))

  • 只添加push方法也能調(diào)用,但不會(huì)轉(zhuǎn)成[]的形式
  • 還可以在Object.prototype上添加數(shù)組方法(這樣所有對(duì)象都會(huì)變成類數(shù)組)
  • 這種形式有什么實(shí)際意義:恐怕就是,對(duì)于類數(shù)組形式的對(duì)象,對(duì)他們進(jìn)行push操作后,可以通過(guò)length屬性獲取長(zhǎng)度。注意,對(duì)象依然是沒(méi)有部署iterator接口的,不能使用for…of
var obj = {'0': 1,'1': 2,'2': 3,'length': 3,'push': Array.prototype.push } console.log(obj.push(5)) console.log(obj)

  • push的原理
  • length屬性決定了類數(shù)組的長(zhǎng)度,push開(kāi)始的位置

將類數(shù)組轉(zhuǎn)換成數(shù)組

Array.prototype.slice.call(arguments)

練習(xí)

  • 手寫(xiě)數(shù)組去重
// 注意 key都是字符串類型!可以用在字符串去重 var arr = [0, 1, 2, 3, 'A', 'B', 'c', 2, 3, 'A', 1, 2, 3] Array.prototype.unique = function () {var obj = {}var res = []for (var i = 0; i < this.length; i++) {// 沒(méi)有判斷是否重復(fù),重復(fù)了就去覆蓋var key = this[i]obj[key] = key}for (var k in obj) {res.push(obj[k])}return res } console.log(arr.unique()) // [0, 1, 2, 3, "A", "B", "c"]
  • 優(yōu)化、減少循環(huán)次數(shù)
var arr = [0, 1, 2, 3, 'A', 'B', 'c', 2, 3, 'A', 1, 2, 3] Array.prototype.unique = function () {var obj = {}var res = []for (var i = 0; i < this.length; i++) {// 沒(méi)有判斷是否重復(fù),重復(fù)了就去覆蓋var key = this[i]if (!obj.hasOwnProperty(key)) {obj[key] = keyres.push(key)}}return res } console.log(arr.unique()) // [0, 1, 2, 3, "A", "B", "c"]

  • 封裝typeof 能區(qū)分null、基本包裝類
// typeof 本身就能返回function! function myTypeOf(val) {var temp = ['[object Null]', '[object Function]', '[object Array]', '[object Object]']var baseType = typeof (val)var cmpType = Object.prototype.toString.call(val)if (baseType != 'object') {return baseType} else {return temp.includes(cmpType) ? getName(cmpType) : cmpType} } // 可以改成用枚舉去映射 function getName(str) {return str.split(' ').slice(-1)[0].slice(0, -1).toLocaleLowerCase() } console.log('null', myTypeOf(null)) console.log('undefined', myTypeOf(undefined)) console.log('number', myTypeOf(1)) console.log('string', myTypeOf('null')) console.log('boolean', myTypeOf(true)) console.log('fn', myTypeOf(function () { })) console.log('obj', myTypeOf({ a: 1 })) console.log('arr', myTypeOf([1])) console.log('new Boolean', myTypeOf(new Boolean(1))) console.log('new Number', myTypeOf(new Number('1'))) console.log('new String', myTypeOf(new String(1)))

  • 找出字符串中不重復(fù)的
var str = 'dsjfhdkjshfkdj0shfc0bkjkja' function getStr() {let obj = {}let res = ''for (var i = 0; i < str.length; i++) {let val = str[i]if (!obj.hasOwnProperty(val)) {obj[val] = 1} else {obj[val] += 1}}for (var k in obj) {if (obj[k] === 1) {res += k}}return res } console.log(getStr(str)) // cba

or

var str = 'dsjfhdkjshfkdj0shfc0bkjkja' function getStr() {var res = ''for (var i = 0; i < str.length; i++) {var cur = str[i]if (str.indexOf(cur) == str.lastIndexOf(cur)) {res += cur}}return res } console.log(getStr(str)) // cba

總結(jié)

以上是生活随笔為你收集整理的ES5-16【utils】数组方法、类数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。