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. NAT模式、路由模式、桥接模式的区别

    NAT模式 NAT模式概述 NAT是"Network Address Translation"的缩写,中文意思是"网络地址转换",它允许一个整体机构以一个公用I ...

  2. testng学习笔记-- beforeclass和afterclass

    一.定义 类之前和类之后运行的方法 使用场景: 类运行之前是否需要静态方法,变量赋值,写完其他方法都可以用了 二.标签代码 三.运行结果

  3. jdk安装简洁版

    一.jdk是what? jdk其实是个软件语言开发包,包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. 没有JDK的话,无法编译Java程序(指java源码.java文件),如果想 ...

  4. pywin32 pywin32 docx文档转html页面 word doc docx 提取文字 图片 html 结构

    https://blog.csdn.net/X21214054/article/details/78873338# python docx文档转html页面 - 程序猿tx - 博客园 https:/ ...

  5. css知识补充

    盒子模型的介绍: 在网页中基本上都会显示一些方方正正的盒子,这种盒子就被我们称为盒模型 盒子模型的五个属性: width,height,border(边框),padding(内边距),margin(外 ...

  6. Python3 如何查看内置函数都有哪些?

    数据科学交流群,群号:189158789,欢迎各位对数据科学感兴趣的小伙伴的加入! 上代码: 1 import builtins 2 num = len(dir(builtins)) 3 print( ...

  7. nginx教程<一>

    2020最新Nginx教程全面讲解教程,感觉讲的很不错但是需要有docker基础,因为是基于docker快速搭建的nginx. 1.为什么要学习Nginx 肯定是工作和业务需求催生的学习需要哈哈,不过 ...

  8. DolphinScheduler1.3.2源码分析(一)看源码前先把疑问列出来

    1.谈谈如何看源码   个人觉得拿到一个开源的项目,首先要先使用一下. 如果是有页面的那种,可以先把测试平台部署起来,然后到处随意点点,然后用一下最基础的功能,走一遍基础的使用流程.不用担心会把系统弄 ...

  9. 深度解读.NET5 授权中间件执行策略

    前文提要 2021.1月份我写了一个<这难道不是.NET5 的bug? 在线求锤?>, 讲述了我在实现[全局授权访问+特例匿名访问] 遇到的技术困惑: [特例匿名访问,还是走了认证流程]. ...

  10. 2019牛客暑期多校训练营(第一场)I Points Division(dp+线段树优化)

    给你n个点,第i个点在的位置为(xi,yi),有两个属性值(ai,bi).现在让你把这n个点划分为A和B两个部分,使得最后不存在i∈A和j∈B,使得xi>=xj且yi<=yj.然后对于所有 ...