js Array All In One
js Array All In One
array 方法,改变原数组(长度),不改变原数组(长度)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
static 方法:
Array.isArray / Array.of / Array.fromproperty:
length改变原来 array (原数组长度):
unshift / push / shift / pop / splice / copyWithin / fill改变原来 array (原数组):
sort / reverse不改变原来 array长度:
访问器方法: slice / filter / join / concat / includes / indexOf / lastIndexOf / toString / toSource / toLocaleString & flat / flatMap
迭代器方法: entries / keys / values / every /some / find / findIndex / map / reduce / reduceRight
demos
reverse
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse
const log = console.log;
const arr = ['one', 'two', 'three'];
log('\narr =', arr);
// ["one", "two", "three"]
const reversed = arr.reverse();
log('\nreversed =', reversed);
// ["three", "two", "one"]
// ️ Careful: reverse is destructive -- it changes the original array.
// ️ 注意:reverse是破坏性的-它会更改原始数组
log('\nnew arr =', arr);
// ["three", "two", "one"]

splice
splice 改变原数组的长度
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
const log = console.log;
const arr = [1, 2, 3, 4, 5, 6, 7];
let mid = arr.splice(Math.floor(arr.length / 2), 1);
let value = mid[0];
log(`mid arr =`, mid)
log(`mid value =`, value)
log(`new arr =`, arr)
/*
mid arr = [4]
mid value = 4
new arr = (6) [1, 2, 3, 5, 6, 7]
*/
slice
slice 不改变原数组的长度
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
const log = console.log;
const arr = [1, 2, 3, 4, 5, 6, 7];
let mid = arr.slice(Math.floor(arr.length / 2), Math.floor(arr.length / 2) + 1);
let value = mid[0];
log(`mid arr =`, mid)
log(`mid value =`, value)
log(`new arr =`, arr)
/*
mid arr = [4]
mid value = 4
new arr = (7) [1, 2, 3, 4, 5, 6, 7]
*/
of
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/of
from
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from
reduce
累加器 acc
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
const log = console.log;
const arr = [1, 2, 3, 4, 5, 6, 7];
const sum = arr.reduce((acc, item) => acc+= item, 0);
log(`sum =`, sum);
// sum = 28
flat & flatMap
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap
const arr1 = [1, 2, [3, 4]];
arr1.flat();
// (4) [1, 2, 3, 4]
arr1;
// (3) [1, 2, Array(2)]
const arr = [1, 2, 3, 4];
arr.flatMap(x => [x, x * 2]);
// (8) [1, 2, 2, 4, 3, 6, 4, 8]
arr;
// (4) [1, 2, 3, 4]
const arr = [1, 2, 3, 4];
arr.flatMap(x => [x, x * 2]);
// is equivalent to
arr.reduce((acc, x) => acc.concat([x, x * 2]), []);
// [1, 2, 2, 4, 3, 6, 4, 8]
for loop
for / forEach / for in / for of
for in === Object
for of === array / NodeList / Set / Map ...
for in
Object.hasOwnProperty 过滤从 proto / prototype 上面
继承的可枚举属性
The for...in statement iterates over all enumerable properties of an object that are keyed by strings (ignoring ones keyed by Symbols), including inherited enumerable properties.
for ... in语句迭代对象的所有可枚举属性(包括继承的可枚举属性),这些可枚举属性由字符串键入(忽略由Symbol键入的属性)。
for...in 支持 Array
"use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-10-01
* @modified
*
* @description for...in & Object.hasOwnProperty
* @difficulty Easy Medium Hard
* @complexity O(n)
* @augments
* @example
* @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
* @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
* @solutions
*
* @best_solutions
*
*/
const log = console.log;
const obj = {
a: 1,
b: 2,
};
// obj.prototype.c = 3;
log(`obj.prototype =`, obj.prototype)
// obj.prototype = undefined
obj.__proto__.c = 3;
log(`obj.__proto__ =`, obj.__proto__)
// obj.__proto__ = {}
log(`\n`)
const keys = Object.keys(obj);
for (let i = 0; i < keys.length; i++) {
log(`keys[${i}] =`, obj[keys[i]]);
}
log(`\n`)
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
log(`key =`, obj[key]);
} else {
log(`__proto__ key =`, obj[key]);
}
}
/*
obj.prototype = undefined
obj.__proto__ = { c: 3 }
keys[0] = 1
keys[1] = 2
key = 1
key = 2
*/
const arr = [1, 2, 3, 4, 5, 6, 7];
log(`\n`)
for (const key in arr) {
// for...in & array
log(`index =`, key, arr[key] );
// 包含Object 上,包括原型链上继承的所有可枚举的 string 属性
log(`typeof(item) =`, typeof(item));
// typeof(item) = string
}
/*
index = 0 1
index = 1 2
index = 2 3
index = 3 4
index = 4 5
index = 5 6
index = 6 7
index = c 3
*/
log(`\n`)
for (const item in arr) {
// log(`typeof(item) =`, typeof(item));
// typeof(item) = string
if(item === "3") {
// for...in & break
log(`for...in break =`, item);
break;
} else {
log(`item =`, item);
}
}
/*
item = 0
item = 1
item = 2
for...in break = 3
*/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
for of
The for...of statement creates a loop iterating over iterable objects, including: built-in String, Array, array-like objects (e.g., arguments or NodeList), TypedArray, Map, Set, and user-defined iterables.
for...of 不支持 Object
"use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-10-01
* @modified
*
* @description
* @difficulty Easy Medium Hard
* @complexity O(n)
* @augments
* @example
* @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of
* @solutions
*
* @best_solutions
*
*/
const log = console.log;
const obj = {
a: 1,
b: 2,
};
// TypeError: obj is not iterable
// for (const key of obj) {
// // for...of & object
// log(`key =`, obj[key]);
// }
const arr = [1, 2, 3, 4, 5, 6, 7];
log(`\n`)
for (const item of arr) {
// for...of & array
log(`item =`, item);
}
log(`\n`)
for (const item of arr) {
if(item === 3) {
// for...of & break
log(`for...of break =`, item);
break;
} else {
log(`item =`, item);
}
}
/*
item = 1
item = 2
item = 3
item = 4
item = 5
item = 6
item = 7
item = 1
item = 2
for...of break = 3
*/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of
forEach
refs
MDN Array
https://img2020.cnblogs.com/blog/740516/202004/740516-20200428000822349-2064140300.png
xgqfrms 2012-2020
www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
js Array All In One的更多相关文章
- js Array数组的使用
js Array数组的使用 Array是javascript中的一个事先定义好的对象(也可以称作一个类),可以直接使用 创建Array对象 var array=new Array(): 创建指定元 ...
- 从Chrome源码看JS Array的实现
.aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } .crayon-line spa ...
- js Array 方法总结
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- js & array to string
js & array to string https://stackoverflow.com/questions/13272406/convert-string-with-commas-to- ...
- From Ruby array to JS array in Rails- 'quote'?
From Ruby array to JS array in Rails- 'quote'? <%= raw @location_list.as_json %>
- 解决js array的key不为数字时获取长度的问题
最近写js时碰到了当数组key不为数字时,获取数组的长度为0 的情况. 1.问题场景 var arr = new Array(); arr[‘s1‘] = 1001; console.log(arr. ...
- JS Array.reverse 将数组元素颠倒顺序
<pre><script type="text/javascript"> //JS Array.reverse 将数组元素颠倒顺序//在JavaScript ...
- js Array 中的 map, filter 和 reduce
原文中部分源码来源于:JS Array.reduce 实现 Array.map 和 Array.filter Array 中的高阶函数 ---- map, filter, reduce map() - ...
- js array & unshift === push head
js array & unshift === push head const arr = [1, 2, 3]; console.log(arr.unshift(4, 5)); // 5 con ...
- js Array.from & Array.of All In One
js Array.from & Array.of All In One 数组生成器 Array.from The Array.from() static method creates a ne ...
随机推荐
- 实用 nginx.conf 用法大全
服务器拒绝非GET方式请求保障安全性,因为 DELETE.POST.PUT 是可以修改数据的. Nginx 解决方案 在 nginx.conf 配置文件的网站配置区域中添加如下代码片段: 非 GET ...
- Flash图解线程池 | 阿里巴巴面试官希望问的线程池到底是什么?
前言 前几天小强去阿里巴巴面试Java岗,止步于二面. 他和我诉苦自己被虐的多惨多惨,特别是深挖线程和线程池的时候,居然被问到不知道如何作答. 对于他的遭遇,结合他过了一面的那个嘚瑟样,我深表同情(加 ...
- (三)集成 JavaMail ,实现异步发送邮件
集成 JavaMail ,实现异步发送邮件 1.JavaMail的核心API 1.1 API功能图解 1.2 API说明 1.2.1 Message 类: 1.2.2 Transport 类 1.2. ...
- (三)SpringBoot停止服务的方法
SpringBoot停止服务的方法 第一种:actuator 第二种:context 第三种:进程号 第四种:SpringApplication.exit() 第五种:自定义Controller Sp ...
- 一:Spring Boot 的配置文件 application.properties
Spring Boot 的配置文件 application.properties 1.位置问题 2.普通的属性注入 3.类型安全的属性注入 1.位置问题 当我们创建一个 Spring Boot 工程时 ...
- 虚拟局域网(VLAN)__语音VLAN
1.语音VLAN特性使得访问端口能够携带来自IP电话的IP语音流量.当交换机连接到Cisco IP电话时,IP电话就用第3层IP优先级(precedence)和第2层服务级别(class of ser ...
- 弱网测试之Fidder
是用Fidder可以模拟若罔测试. 1.Fiider设置 fiddler中选中Rules->Cutomize Rules,在文件中搜索关键字:m_SimulateModem: 修改m_Simul ...
- Pytest(10)assert断言
前言 断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了.什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试 failed ...
- E - Period(KMP中next数组的运用)
一个带有 n 个字符的字符串 s ,要求找出 s 的前缀中具有循环结构的字符子串,也就是要输出具有循环结构的前缀的最后一个数下标与其对应最大循环次数.(次数要求至少为2) For each prefi ...
- 最小生成树(MST)Prim算法和Kruskal算法
刚学完最小生成树,赶紧写写学习的心得(其实是怕我自己忘了) 最小生成树概念:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 就是说 ...