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.mzph.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…