javscript之数组(一)
声明一个数组:
创建一个空数组有两种语法:
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
设置为 0
,splice
方法就能够插入元素而不用删除任何元素
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
,然后是 arg1
,arg2
的元素的新数组。
如果参数 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之数组(一)相关推荐
- javascript 数组求交集/差集/并集/过滤重复
最近在小一个小程序项目,突然发现 javscript 对数组支持不是很好,连这些基本的功能,都还要自己封装.网上查了下,再结合自己的想法,封装了一下,代码如下. //数组交集 Array.protot ...
- 269道各路算法考试题集锦
1 某编程大赛题(35道题,中等难度) 1.在实际的开发工作中,对于string的处理是最常见的编程任务,本题是要求程序对用户输入的string进行处理,具体要求如下: 1.每个单词的首字母变为大写. ...
- Javscript数组中最常用的方法(建议收藏)
数组最常见的方法 操作方法 排序方法 转换方法 迭代方法 js中数组的方法不管是写原生还是用框架,我们都会经常运用到,以及也有一些面试官会问到甚至让我们手写一个数组的排序函数: 所以我就通过查找一些好 ...
- Javscript数组的常用方法有哪些?
数组基本操作可以归纳为 增.删.改.查,需要留意的是哪些方法会对原数组产生影响,哪些方法不会 下面对数组常用的操作方法做一个归纳 增 下面前三种是对原数组产生影响的增添方法,第四种则不会对原数组产生影 ...
- Javascript用递归的方式遍历json数组
前言 Javscript语言有很多值得探究和注意的地方,下面我们来看一下用递归的方式遍历JSON对象数组. 正文 假设我们的要遍历的数组是这样的: var array = [{id: 1,childr ...
- js用递归遍历多维数组_js面试题更新之40
1.数组方法pop() push() unshift() shift() push 后面添加元素,个数不限,返回新数组的长度 pop 从后面删除一个元素,返回那个元素 unshift ...
- unshift() :将一个或多个元素添加到数组的开头
在今天的文章中,我们将学习如何使用 JavaScript Array unshift() 方法将一个或多个元素添加到数组的开头. JavScript Array unshift() 方法介绍 Arra ...
- 《Javscript实用教程》
图书购买地址:<Javscript实用教程> 目录 Javascript实用教程... 1 目录... 2 第 1 部分... 12 ◄ Javascript基础 ►. 12 第 1 章. ...
- python数组堆叠,堆叠数组-python数据处理
堆叠数组-python数据处理 堆叠数组-python数据处理 从深度看,数组既可以横向叠放,也可以竖向叠放.为此,可以使用vstack().dstack().hstack().column_stac ...
最新文章
- python工具使用笔记
- 被吴恩达的Landing.ai刷屏后,我们从他的8条Twitter和9大招聘岗位中看到了三个有趣细节
- fetchsize jdbc_MySQL JDBC FetchSize解析
- 使用Spring整合Quartz轻松完成定时任务
- PMCAFF产品经理社区原创专栏,产品圈的干货看这儿就够了
- php谈谈你对分布式的理解,简谈关于对分布式处理的理解
- 金士顿sd卡恢复软件_手机上使用SD内存卡会让手机性能变差?
- python定时刷新tkinter界面_如何在python中“刷新”Tkinter窗口?
- Spark : ContextCleaner清理器
- node(基础)_node中的javascript
- C语言将20个数从小到大排列,现在我想实现这个20个数从小到大排序(冒泡排序),不知道代码如何写。...
- 物权法全文内容有哪些呢-广告外链_SEO优化的站外优化工作有哪些?
- PyQT简单入门--hello world
- html——相对路径、绝对路径(有待补充....)
- Node.js实现一个HTTP服务器
- 第二阶段—个人工作总结02
- PTA程序设计类实验辅助教学平台-基础编程题--JAVA--7.4 BCD解密
- Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别---转
- 计算机基础知识第三章答案,2011年河北省职称计算机模拟习题(基础知识第三章+标准答案)...
- 良心安利秋分海报设计模板素材
热门文章
- 2.Flask-jinjia2模板
- bzoj 1070: [SCOI2007]修车【最小费用最大流】
- ios---NSNotificationCenter传值
- 基于RNGCryptoServiceProvider的洗牌算法
- underscore.js中的节流函数debounce及trottle
- Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例
- 怎样才能成为一名优秀的教师博客呢?
- java 自定义事件_在Java中创建自定义事件
- fdfs往服务器上传文件超时,FastDFS 实现大文件分片上传
- linux网速卡怎么办_手机同是4G网络,为什么总比别人慢,学会这个方法,网速成倍提升...