js Array All In One

array 方法,改变原数组(长度),不改变原数组(长度)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array

  1. static 方法: Array.isArray / Array.of / Array.from

  2. property: length

  3. 改变原来 array (原数组长度): unshift / push / shift / pop / splice / copyWithin / fill

  4. 改变原来 array (原数组): sort / reverse

  5. 不改变原来 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

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

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的更多相关文章

  1. js Array数组的使用

    js Array数组的使用   Array是javascript中的一个事先定义好的对象(也可以称作一个类),可以直接使用 创建Array对象 var array=new Array(): 创建指定元 ...

  2. 从Chrome源码看JS Array的实现

    .aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } .crayon-line spa ...

  3. js Array 方法总结

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. js & array to string

    js & array to string https://stackoverflow.com/questions/13272406/convert-string-with-commas-to- ...

  5. From Ruby array to JS array in Rails- 'quote'?

    From Ruby array to JS array in Rails- 'quote'? <%= raw @location_list.as_json %>

  6. 解决js array的key不为数字时获取长度的问题

    最近写js时碰到了当数组key不为数字时,获取数组的长度为0 的情况. 1.问题场景 var arr = new Array(); arr[‘s1‘] = 1001; console.log(arr. ...

  7. JS Array.reverse 将数组元素颠倒顺序

    <pre><script type="text/javascript"> //JS Array.reverse 将数组元素颠倒顺序//在JavaScript ...

  8. js Array 中的 map, filter 和 reduce

    原文中部分源码来源于:JS Array.reduce 实现 Array.map 和 Array.filter Array 中的高阶函数 ---- map, filter, reduce map() - ...

  9. js array & unshift === push head

    js array & unshift === push head const arr = [1, 2, 3]; console.log(arr.unshift(4, 5)); // 5 con ...

  10. 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 ...

随机推荐

  1. 一文打尽 Linux/Windows端口复用实战

    出品|MS08067实验室(www.ms08067.com) 本文作者:Spark(Ms08067内网安全小组成员) 定义:端口复用是指不同的应用程序使用相同端口进行通讯. 场景:内网渗透中,搭建隧道 ...

  2. (转载)微软数据挖掘算法:Microsoft 时序算法之结果预测及其彩票预测(6)

    前言 本篇我们将总结的算法为Microsoft时序算法的结果预测值,是上一篇文章微软数据挖掘算法:Microsoft 时序算法(5)的一个总结,上一篇我们已经基于微软案例数据库的销售历史信息表,利用M ...

  3. SpringMVC听课笔记(二:SpringMVC的 HelloWorld)

    1.如何建Maven web项目,请看http://how2j.cn/k/maven/maven-eclipse-web-project/1334.html 2.Maven项目,pom文件中的jar包 ...

  4. H5 的直播协议和视频监控方案

    H5 的直播协议和视频监控方案 一.流媒体主要实现方式 二.流媒体技术 2.1 流媒体 2.2 直播 2.3 流协议 2.3.1 HLS 协议 2.3.2 RTMP 协议 2.3.3 RTSP 协议 ...

  5. Java——Number类

    在平时学习中,当我们需要使用数字的时候,通常使用内置数据类型,如byte,int,long,double等. int i =12; float a = 12.3; 在实际开发中,经常会遇到需要使用对象 ...

  6. Vagrant基本知识、基本操作

    Vagrant基本知识.基本操作 一.介绍 二.安装Vagrant 三.安装到Windows 四.准备Boxes 五.基本操作 六.Vagrant常用命令 七.Vagrantfile 7.1 box ...

  7. hive-2.2.0 伪分布式环境搭建

    一,实验环境: 1, ubuntu server 16.04 2, jdk,1.8 3, hadoop 2.7.4 伪分布式环境或者集群模式 4, apache-hive-2.2.0-bin.tar. ...

  8. C++类基本--随笔一

    #include <iostream> using namespace std; class Teacher { public: Teacher(int m=3,int n=2) { a= ...

  9. Notepad++ 替换 CRLF 为 LF

    对于文件中每一行的结尾符号,Windows 下默认为 CRLF,而 Unix 下默认为 LF. 所以经常会有这样的情况发生:在 Windows 系统下编辑的文件放在 Unix 下不能正常执行,比如 b ...

  10. AtCoder Beginner Contest 177

    比赛链接:https://atcoder.jp/contests/abc177/tasks A - Don't be late #include <bits/stdc++.h> using ...