数组方法

forEach

// no-log
Array.prototype.forEach_ = function (cb) {
let len = this.length
for (let i = 0; i < len; i++) {
cb(this[i], i)
}
}
// log
let arr = ['', '', '']
arr.forEach_((item, index) => {
console.log('值:' + item + ' => ' + '索引:' + index)
})

为其加入中止功能

// no-log
Array.prototype.forEach_ = function (cb) {
let len = this.length
for (let i = 0; i < len; i++) {
let result = cb(this[i], i)
if (result === false) {
continue
}
}
}
// log
let arr = [1, 2, 120, 12, 3]
arr.forEach_((item, index) => {
if (item > 100) {
return false
}
console.log(item)
})

push

// no-log
Array.prototype.$push = function () {
for (let i = 0; i < arguments.length; i++) {
this[this.length] = arguments[i]
}
return this.length
}
// log
let arr = [1, 2]
console.log(arr.$push(3, 4))
console.log(arr)

join

join 的效率要比字符串拼接高

// log
let str1 = '1'
let str2 = '2'
let str3 = '3'
let str4 = '4'
let str5 = '5'
let str6 = '6'
let arr = [str1, str2, str3, str4, str5, str6]
let strFinal = '' function f1() {
for (let i = 0; i < arr.length; i++) {
strFinal += arr[i]
}
} function f2() {
strFinal += arr.join('')
}
// test +
{
let start = new Date().getTime()
for (let i = 0; i < 100000; i++) {
f1()
}
let end = new Date().getTime()
console.log('字符串拼接耗时: ' + (end - start))
} // test join
{
let start = new Date().getTime()
for (let i = 0; i < 10000; i++) {
f2()
}
let end = new Date().getTime()
console.log('join耗时: ' + (end - start))
}

类数组

必须有length属性

// log
let obj = {
1: 'a',
2: 'b',
length: 2,
}
Array.prototype.push.call(obj, 'c')
console.log(obj)
// log
let obj = {
2: 'a',
3: 'b',
length: 2,
push: Array.prototype.push,
}
obj.push('c', 'd')
console.log(obj)

Set

// log
// 去重
function unique(arr) {
return [...new Set(arr)]
} // 交集
function intersection(arr1, arr2) {
let uniqueArr1 = [...new Set(arr1)]
return uniqueArr1.filter((item) => new Set(arr2).has(item))
} // 并集
function union(arr1, arr2) {
return [...new Set([...arr1, ...arr2])]
} // 差集
function diff(arr1, arr2) {
// 交集取反即可
let uniqueArr1 = [...new Set(arr1)]
return uniqueArr1.filter((item) => !new Set(arr2).has(item))
} let x = [1, 2, 1, 0, 1, 2, 3, 4, 5, 1, 3, 4, 5, 2, 3, 2, 1, 2, 3, 4]
let y = [0, 10, 20, 30, 30, 40, 50]
console.log(unique(x))
console.log(intersection(x, y))
console.log(union(x, y))
console.log(diff(x, y))
console.log(diff(y, x))

JS语法_集合的更多相关文章

  1. python语法_集合

    集合:不同的元素(不可hash)组合在一起的就叫做集合,去掉重复的,以空字符返回,无序的 可以分为可变集合和不可变集合(frozenset) 创建: s = set('gm gyx') print(s ...

  2. Python基本语法_集合set/frozenset_内建方法详解

    目录 目录 前言 软件环境 可变集合Set set函数创建集合 创建空集合 集合元素的唯一性 集合推导式 set类型对象的内置方法 add增加一个元素 remove删除一个元素 pop随机删除并返回一 ...

  3. JS语法_类型

    类型 JS 的数据类型 boolean number string undefined null symbol object TS 额外的数据类型 void BigInt 是一种内置对象,它提供了一种 ...

  4. JS语法_其他

    严格模式 let obj = { name: 'oceans', } function f1() { with (obj) { console.log(name) } } function f2() ...

  5. JS 语法大全

    来源http://blog.csdn.net/newegg2009/article/details/6230582 js语法2008年03月19日 星期三 11:14一.js的数据类型和变量 Java ...

  6. 01.JS语法规范、变量与常量

    前言:    学习一门编程语言的基本步骤   (01)了解背景知识  (02)搭建开发环境  (03)语法规范  (04)常量和变量 2.JS的开发环境 (1)浏览器自带的JS解释器(js引擎) (2 ...

  7. Js获取后台集合List的值和下标的方法

    Js获取后台集合List的值和下标的方法 转载自:http://blog.csdn.net/XiaoKanZheShiJie/article/details/47280449 首先用的是struts2 ...

  8. JS语法(二)

    JS变量 var 变量名 = 变量值://自己会判断什么类型 一个好的编程习惯是,在代码开始处,统一对需要的变量进行声明. var name = “xiaosan”, age = 22, addres ...

  9. Sublime text3 JS语法检测工具安装及使用

    Sublime text3 JS语法检测工具安装及使用 工具/原料 sublime text3 nodejs sublimeLinter sublimeLinter-jshint 方法/步骤 首先ct ...

随机推荐

  1. 2020-04-14:mysql原子性和持久性怎么保证

    1.Mysql怎么保证一致性的? OK,这个问题分为两个层面来说. 从数据库层面,数据库通过原子性.隔离性.持久性来保证一致性.也就是说ACID四大特性之中,C(一致性)是目的,A(原子性).I(隔离 ...

  2. C#LeetCode刷题-几何

    几何篇 # 题名 刷题 通过率 难度 587 安装栅栏   21.5% 困难 892 三维形体的表面积 C#LeetCode刷题之#892-三维形体的表面积(Surface Area of 3D Sh ...

  3. JavaScript 循环数组的时候调用方法中包含Promise的时候如何做到串行

    forEach是不能阻塞的, 默认[并行]方式 const list = [1, 2, 3] const square = num => { return new Promise((resolv ...

  4. Manacher(马拉车)算法(jekyll迁移)

    layout: post title: Manacher(马拉车)算法 date: 2019-09-07 author: xiepl1997 cover: 'assets/img/manacher.p ...

  5. Oracle创建主键优劣

    创建主键方式 一个表的主键是唯一标识,不能有重复,不允许为空. 一个表的主键可以由一个字段或多个字段共同组成. -- 列级,表级建立主键 1.create table constraint_test ...

  6. 一、Spring的基本应用

    1.spring导包 导入maven包 <dependencies> <dependency> <groupId>org.springframework</g ...

  7. 一个在交流群里讨论过两轮的问题,答案竟然跟一个 PEP 有关

    Python 中有没有办法通过类方法找到其所属的类? 这个问题看起来不容易理解,我可以给出一个例子: class Test: @xxx def foo(self): pass 现在有一个类和一个类方法 ...

  8. Java并发--volatile关键字

    一.volatile的实现原理 synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile就可以说是JVM提供的最轻量级的同步机制.JMM告诉我们,各个线程会将共 ...

  9. 修改linux 动态ip为静态ip

    vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO=static 设置网卡引导协议为 静态 ONBOOT=yes 网卡开机自启动 配置[IP ...

  10. jq js 获取子元素

    js this.children[1].className=""this.firstChild.className = ""this.lastChild.cla ...