ES5-16【utils】數組方法、類數組

數組方法

concat

  • 返回值是拼接后的數組

toString

  • 將數組轉成字符串,用逗號隔開

slice(a,b) [a,b)

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

join

  • 不傳參數相當于toString!用逗號連接
  • 傳空字符串,去除逗號
    在這里插入圖片描述

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

  • 不傳值,會將整個字符串放進數組
  • 第二個參數b,是用a分割后截取b位
    在這里插入圖片描述
    在這里插入圖片描述

類數組

  • 函數的實參arguments
  • dom數組
  • 沒有數組方法,因為沒有繼承Array.prototype,繼承Object.prototype
  • 類數組的原型
function test() {console.log(arguments)console.log(arguments.toString())
}
test(1, 2, 3)

在這里插入圖片描述

  • 改變原型
function test() {console.log(arguments)arguments.__proto__ = Array.prototypeconsole.log(arguments.toString())
}
test(1, 2, 3)

在這里插入圖片描述

  • 對象轉類數組:給對象加splice屬性,對象的原型依然是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)

在這里插入圖片描述

  • 調用對象上添加的方法
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方法也能調用,但不會轉成[]的形式
  • 還可以在Object.prototype上添加數組方法(這樣所有對象都會變成類數組)
  • 這種形式有什么實際意義:恐怕就是,對于類數組形式的對象,對他們進行push操作后,可以通過length屬性獲取長度。注意,對象依然是沒有部署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屬性決定了類數組的長度,push開始的位置
    在這里插入圖片描述

將類數組轉換成數組

Array.prototype.slice.call(arguments)

練習

  • 手寫數組去重
// 注意 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++) {// 沒有判斷是否重復,重復了就去覆蓋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"]
  • 優化、減少循環次數
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++) {// 沒有判斷是否重復,重復了就去覆蓋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 能區分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)))

在這里插入圖片描述

  • 找出字符串中不重復的
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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251155.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251155.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Catalan卡塔蘭數

卡塔蘭數 卡塔蘭數是組合數學中一個常出現在各種計數問題中出現的數列。由以比利時的數學家歐仁查理卡塔蘭 (1814–1894)命名。 卡塔蘭數的一般項公式為 另類遞歸式&#xff1a; h(n)((4*n-2)/(n1))*h(n-1); 前幾項為: 1, 1, 2, 5, 14, 42, 132, 429, …

vue --- v-html、v-bind

v-html // 有時候,我們需要展示<strong>,但直接使用下面的語法并不會顯示 <div id "app">{{name}}</div><script>let app new Vue({el:#app,data:{name:<strong>啦啦啦</strong>}}); </scritp> // 結果當然沒讓人失望此…

在樹莓派是安裝并配置NTP服務

我們都知道樹莓派的小巧和省電節省空間等太多的優勢&#xff0c;這里就不一一列舉了&#xff0c;那么樹莓派就需要長時間的運行&#xff0c;可以724的方式運行&#xff0c;那么我們就把樹莓派當作一個小的服務器來運行&#xff0c;可以跑一些小的應用&#xff0c;例如可以在局域…

Oracle使用總結

1. 在ORACLE中Service Name即為數據庫名稱&#xff1b; 2. 在做刪除操作時&#xff0c;需要加Commit進行操作提交&#xff1b; 3. 使用sqlldr將數據進行批量導入到ORACLE中&#xff1a; 3.1 Sqlldr命令的用法&#xff1a; sqlldr useridLoginName/PasswordTNSName controlC:\U…

ES5-17/18 錯誤信息、try_catch、嚴格模式

錯誤信息 語法錯誤 標識符名稱&#xff08;變量、函數名&#xff09;不規范對關鍵字賦值基本語法錯誤&#xff0c;如分號打錯 引用錯誤 變量、函數未聲明給無法賦值的對象賦值var a 1 2 范圍錯誤 數組長度為負數方法參數超出可行范圍toFixed(-1) 類型錯誤 調用不存在…

vue --- v-text、v-show、v-if、v-else

v-text: <div id "app"><p v-text"msg"></p> </div> <script>let app new Vue({el:#app,data:{msg:Hello Vue}}) </script>// 可見v-text在某種程度上等價于 {{}}v-show: <div id "app"><div…

查找mac下騰訊視頻下載地址

mac 騰訊視頻下載的視頻是不可見的&#xff0c;也許是因為版權原因吧。使用以下方法可以在文件中找到緩存的視頻&#xff08;不過都是被斷開的很多短視頻&#xff09;。 在terminal輸入&#xff1a; cd Library/Containers/ 然后ls查看。查看當前的所有文件夾&#xff0c;你會看…

JS 新建web sql 數據表

//新建web sql數據庫數據表var tbName"tableName";var strSQL"create table if not exists tableName (id unique,th1,th2,th3)";function creatBDTable(strSQL,tbName){db openDB();db.transaction(function(tr) {tr.executeSql(strSQL,[],//SQL語句出成…

vue --- v-for、v-on、v-model、v-once

v-for: <div id "app"><ul><li v-for"item in list">{{item}}</li></ul> </div> <script>let app new Vue({el:#app,data:{list:[B,A,T]}}) </script>拿到索引index: <div id"app">&…

ES5-19 變量聲命周期、垃圾回收原理、arguments

變量聲命周期 垃圾回收 找出不再使用的變量釋放其占用內存固定的時間間隔運行 解除由于閉包產生的對fn AO的引用 標記清除 排除全局變量、排除閉包引用的AO中的變量進入環境 → 離開環境常用 引用計數 引用計數為0時清除對循環引用的情況&#xff0c;如果不手動接觸引用…

bzoj 1801: [Ahoi2009]chess 中國象棋【dp】

注意到一行只能放012個炮&#xff0c;我們只需要知道列的狀態&#xff0c;不用狀壓行 所以設f[i][j][k]表示前i行有j列有1個炮&#xff0c;有k列有2個炮的方案數 然后分情況討論轉移就行了 #include<cstdio> #include<iostream> using namespace std; const int N1…

vue --- compoent妙用

首先利用寫一個靜態模板的組件 <div id "app"><my-arti></my-arti> </div> <script>Vue.component(my-arti,{template:<div style"border:1px solid black"><span>date:2019年06月14日</span><br>…

ES5-20 復習

3-1 變量單一聲明方式String Boolean undefined Number nullundefined nulltypeof(null) ‘object’typeof(方法) ‘function’typeof() 是運算符&#xff0c;不是數據類型 報錯0 -0 trueInfinity -Infinity falseNaN和誰都不等原始值沒有屬性 要打印屬性、調用方法得經過基…

eclipse中去掉警告提示

有時候我們要去掉這些不必要的提示 下面我們來設置去掉這些警告提示 轉載于:https://www.cnblogs.com/xiaostudy/p/9370016.html

vue --- vue-router

vue-router的CDN <script src "https://unpkg.com/vue-router2.5.3/dist/vue-router.js"></script>// 當然還需要導入vue的cdn <script src"https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script>使用router-link(to)添加點擊鏈…

django-restframework使用

安裝restframework: pip install djangorestframework 修改項目settings.py: INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,rest_framework, ]修改項…

JSON基礎與數據解析、JSON方法、AJAX初識

JSON JavaScript Object Notation js對象標記是對象&#xff0c;是輕量級數據交互的格式&#xff0c;不能有方法它基于 JavaScript 語法&#xff0c;但與之不同&#xff1a;JavaScript不是JSON&#xff0c;JSON也不是JavaScript映射用:隔開并列數據用,隔開映射的集合用{}包裹鍵…

iOS開發經驗總結

在iOS開發中經常需要使用的或不常用的知識點的總結&#xff0c;幾年的收藏和積累&#xff08;踩過的坑&#xff09;。 一、 iPhone Size 二、 給navigation Bar 設置 title 顏色 123UIColor *whiteColor [UIColor whiteColor];NSDictionary *dic [NSDictionary dictionaryWit…

http --- 緩存

Web緩存: // 是可以自動保存常見文檔副本的HTTP設備. // 當Web請求抵達緩存時,如果本地有"已緩存的"副本,就可以從本地存儲設備而不是原始服務器中提取這個文檔.冗余的數據傳輸: // 有很多客戶端訪問一個流行的原始服務器頁面時,服務器會多次傳輸同一份文檔 // 每次…

Django 下添加左側字段顯示和搜索

在對應的apps下建立xadmin.py from .models import EmailVerifyRecord import xadminclass EmailVerifyRecordAdmin(object): list_display [code,email,send_type,send_time]//字段顯示 search_fields [code,email,send_type]//搜索 xadmin.site.register(EmailVerify…