声明一个数组:

创建一个空数组有两种语法:

let arr = new Array();

let arr = [];

数组的操作:

数组的首端或尾端添加和删除元素的方法

  • arr.push(...items) —— 从尾端添加元素,
  • arr.unshift(...items) —— 从首端添加元素
  • arr.pop() —— 从尾端提取元素,
  • arr.shift() —— 从首端提取元素,

delete删除元素:

let arr = ["I", "go", "home"];

delete arr[1]; // remove "go"

alert( arr[1] ); // undefined

// now arr = ["I", , "home"];

alert( arr.length ); // 3

因为 delete obj.key 是通过 key 来移除对应的值。对于对象来说是可以的。但是对于数组来说,我们通常希望剩下的元素能够移动并占据被释放的位置

splice(添加,删除和插入元素)

arr.splice(start[, deleteCount, elem1, ..., elemN])

它从索引 start 开始修改 arr:删除 deleteCount 个元素并在当前位置插入 elem1, ..., elemN。最后返回已被删除元素的数组。

splice删除一个元素:

let arr = ["I", "study", "JavaScript"];

arr.splice(1, 1); // 从索引 1 开始删除 1 个元素

alert( arr ); // ["I", "JavaScript"]

splice删除了 3 个元素,并用另外两个元素替换:

let arr = ["I", "study", "JavaScript", "right", "now"]; // 删除三个元素并且那俩个元素去替换

arr.splice(0, 3, "Let's", "dance");//具体操作

alert( arr ) // now ["Let's", "dance", "right", "now"]//前三个被删除,然后这俩个被替换掉了

splice 返回了已删除元素的数组 

let arr = ["I", "study", "JavaScript", "right", "now"]; // 删除前两个元素

let removed = arr.splice(0, 2);

alert( removed ); // "I", "study" <-- 被从数组中删除了的元素

deleteCount 设置为 0splice 方法就能够插入元素而不用删除任何元素 

let arr = ["I", "study", "JavaScript"]; // 从索引 2 开始 // 删除 0 个元素 // 然后插入 "complex" 和 "language"

arr.splice(2, 0, "complex", "language");

alert( arr ); // "I", "study", "complex", "language", "JavaScript"

注意啦: splice允许负向索引

let arr = [1, 2, 5]; // 从索引 -1(尾端前一位) // 删除 0 个元素, // 然后插入 3 和 4 arr.splice(-1, 0, 3, 4);

alert( arr ); // 1,2,3,4,5

arr.slice方法比 arr.splice 简单得多 

语法是:

arr.slice( [start],  [end] )

它会返回一个新数组,将所有从索引 start 到 end(不包括 end)的数组项复制到一个新的数组。start 和 end 都可以是负数,在这种情况下,从末尾计算索引。

它和字符串的 str.slice 方法有点像,就是把子字符串替换成子数组。

let arr = ["t", "e", "s", "t"];

alert( arr.slice(1, 3) ); // e,s(复制从位置 1 到位置 3 的元素)

alert( arr.slice(-2) ); // s,t(复制从位置 -2 到尾端的元素)

arr.concat创建一个新数组,其中包含来自于其他数组和其他项的值。[数组的合并]

语法:

arr.concat(arg1, arg2...)

它接受任意数量的参数 —— 数组或值都可以。

结果是一个包含来自于 arr,然后是 arg1arg2 的元素的新数组。

如果参数 argN 是一个数组,那么其中的所有元素都会被复制。否则,将复制参数本身。

let arr = [1, 2]; //创建一个数组[3,4]

alert( arr.concat([3, 4]) ); // arr数组合并[3,4]

alert( arr.concat([3, 4], [5, 6]) ); // arr合并[3,4],合并[5,6]

alert( arr.concat([3, 4], 5, 6) ); // 1,2,3,4,5,6数组和字符串合并

数组的遍历;for each方法允许为数组的每个元素都运行一个函数。

arr.forEach(function(item, index, array) {

// ... do something with item

});

// 对每个元素调用

alert ["Bilbo", "Gandalf", "Nazgul"].forEach(alert);

数组中的位置:

["Bilbo", "Gandalf", "Nazgul"].forEach((item, index, array) => {

alert(`${item} is at index ${index} in ${array}`);

});

数组中的搜索 :indexOf

  • arr.indexOf(item, from) 从索引 from 开始搜索 item,如果找到则返回索引,否则返回 -1
  • arr.lastIndexOf(item, from) —— 和上面相同,只是从右向左搜索。
  • arr.includes(item, from) —— 从索引 from 开始搜索 item,如果找到则返回 true(译注:如果没找到,则返回 false

arr.includes检查是否包含元素 

alert( arr.includes(NaN) );// true(这个结果是对的)

find和findIndex 

语法:

let result = arr.find(function(item, index, array) {

// 如果返回 true,则返回 item 并停止迭代 // 对于假值(falsy)的情况,则返回 undefined

});

依次对数组中的每个元素调用该函数:

  • item 是元素。
  • index 是它的索引。
  • array 是数组本身。

如果它返回 true,则搜索停止,并返回 item。如果没有搜索到,则返回 undefined

 我们有一个存储用户的数组,每个用户都有 id 和 name 字段。让我们找到 id == 1 的那个用户:

let users = [ {id: 1, name: "John"}, {id: 2, name: "Pete"}, {id: 3, name: "Mary"} ];

let user = users.find(item => item.id == 1);

alert(user.name); // John

arr.findindex 方法(与 arr.find 方法)基本上是一样的,但它返回找到元素的索引,而不是元素本身。并且在未找到任何内容时返回 -1

filter(filter 返回的是所有匹配元素组成的数组

let results = arr.filter(function(item, index, array) {

// 如果 true item 被 push 到 results,迭代继续 // 如果什么都没找到,则返回空数组

});

let users = [ {id: 1, name: "John"}, {id: 2, name: "Pete"}, {id: 3, name: "Mary"} ];

// 返回前两个用户的数组

let someUsers = users.filter(item => item.id < 3);

alert(someUsers.length); // 2

javscript之数组(一)相关推荐

  1. javascript 数组求交集/差集/并集/过滤重复

    最近在小一个小程序项目,突然发现 javscript 对数组支持不是很好,连这些基本的功能,都还要自己封装.网上查了下,再结合自己的想法,封装了一下,代码如下. //数组交集 Array.protot ...

  2. 269道各路算法考试题集锦

    1 某编程大赛题(35道题,中等难度) 1.在实际的开发工作中,对于string的处理是最常见的编程任务,本题是要求程序对用户输入的string进行处理,具体要求如下: 1.每个单词的首字母变为大写. ...

  3. Javscript数组中最常用的方法(建议收藏)

    数组最常见的方法 操作方法 排序方法 转换方法 迭代方法 js中数组的方法不管是写原生还是用框架,我们都会经常运用到,以及也有一些面试官会问到甚至让我们手写一个数组的排序函数: 所以我就通过查找一些好 ...

  4. Javscript数组的常用方法有哪些?

    数组基本操作可以归纳为 增.删.改.查,需要留意的是哪些方法会对原数组产生影响,哪些方法不会 下面对数组常用的操作方法做一个归纳 增 下面前三种是对原数组产生影响的增添方法,第四种则不会对原数组产生影 ...

  5. Javascript用递归的方式遍历json数组

    前言 Javscript语言有很多值得探究和注意的地方,下面我们来看一下用递归的方式遍历JSON对象数组. 正文 假设我们的要遍历的数组是这样的: var array = [{id: 1,childr ...

  6. js用递归遍历多维数组_js面试题更新之40

    1.数组方法pop() push() unshift() shift() push     后面添加元素,个数不限,返回新数组的长度 pop     从后面删除一个元素,返回那个元素 unshift ...

  7. unshift() :将一个或多个元素添加到数组的开头

    在今天的文章中,我们将学习如何使用 JavaScript Array unshift() 方法将一个或多个元素添加到数组的开头. JavScript Array unshift() 方法介绍 Arra ...

  8. 《Javscript实用教程》

    图书购买地址:<Javscript实用教程> 目录 Javascript实用教程... 1 目录... 2 第 1 部分... 12 ◄ Javascript基础 ►. 12 第 1 章. ...

  9. python数组堆叠,堆叠数组-python数据处理

    堆叠数组-python数据处理 堆叠数组-python数据处理 从深度看,数组既可以横向叠放,也可以竖向叠放.为此,可以使用vstack().dstack().hstack().column_stac ...

最新文章

  1. python工具使用笔记
  2. 被吴恩达的Landing.ai刷屏后,我们从他的8条Twitter和9大招聘岗位中看到了三个有趣细节
  3. fetchsize jdbc_MySQL JDBC FetchSize解析
  4. 使用Spring整合Quartz轻松完成定时任务
  5. PMCAFF产品经理社区原创专栏,产品圈的干货看这儿就够了
  6. php谈谈你对分布式的理解,简谈关于对分布式处理的理解
  7. 金士顿sd卡恢复软件_手机上使用SD内存卡会让手机性能变差?
  8. python定时刷新tkinter界面_如何在python中“刷新”Tkinter窗口?
  9. Spark : ContextCleaner清理器
  10. node(基础)_node中的javascript
  11. C语言将20个数从小到大排列,现在我想实现这个20个数从小到大排序(冒泡排序),不知道代码如何写。...
  12. 物权法全文内容有哪些呢-广告外链_SEO优化的站外优化工作有哪些?
  13. PyQT简单入门--hello world
  14. html——相对路径、绝对路径(有待补充....)
  15. Node.js实现一个HTTP服务器
  16. 第二阶段—个人工作总结02
  17. PTA程序设计类实验辅助教学平台-基础编程题--JAVA--7.4 BCD解密
  18. Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别---转
  19. 计算机基础知识第三章答案,2011年河北省职称计算机模拟习题(基础知识第三章+标准答案)...
  20. 良心安利秋分海报设计模板素材

热门文章

  1. 2.Flask-jinjia2模板
  2. bzoj 1070: [SCOI2007]修车【最小费用最大流】
  3. ios---NSNotificationCenter传值
  4. 基于RNGCryptoServiceProvider的洗牌算法
  5. underscore.js中的节流函数debounce及trottle
  6. Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例
  7. 怎样才能成为一名优秀的教师博客呢?
  8. java 自定义事件_在Java中创建自定义事件
  9. fdfs往服务器上传文件超时,FastDFS 实现大文件分片上传
  10. linux网速卡怎么办_手机同是4G网络,为什么总比别人慢,学会这个方法,网速成倍提升...