JavaScript数组操作常用方法
@
函数和方法的区别:
函数function:独立的function,那么称之为是一个函数。
function foo() {}
方法method:当我们的一个函数属于某一个对象时,我们称这个函数是这个对象的方法。
var obj = {
foo: function() {}
}
obj.foo()
例如,对一个数组的操作方法:filter,我们就称之为是一个方法。
// filter:过滤
var nums = [10, 5, 11, 100, 55]
nums.filter((item) => item > 10)
在以下对数组的操作中,我们统称方法。
文章中通用常量意义:
item:某一项。当作为参数时,为遍历数组中的每一项。当作为返回值时,意思为某项数据,可以为任意类型。
index:下标。当作为参数时,为遍历数组中的item在数组中下标。当作为返回值时,意思为下标。
arr:数组。当作为返回值时,意思为改变数组本身。当作为参数时,意思为自身数组。
length:数组长度。当作为返回值时,意思为数组长度
newarr:新数组。当作为返回值时,意思为产生一个新数组,
boolean:布尔值。当作为方法体时以为:条件的返回值为布尔值。
num:数值类型。
start:数组遍历开始下标(包含)
end:数组遍历结束下标(不包含)
数组基础遍历方法。
for
for(var i = 0, len = arr.length; i < len; i++ ){
console.log(arr[i])
}
for基础循环可以用来遍历数组,字符串,类数组,DOM节点等。
for of
for (var item of arr) {
console.log(item);
}
for of:for-of获取的是数组的值。可以使用 break、continue、return 来中断循环遍历。
for in
for (var value in arr) {
console.log(value);
}
for in:一般用于对对象的遍历,但也可以用于数组。用于数组遍历时,for-in获取的是数组的索引
var arr = [10, 7, 9, 100, 11]
for (var value in arr) {
console.log(value);
}
// 0 1 2 3 4
注意:
1).index索引为字符串型数字,不能直接进行几何运算。
2).使用for in会遍历数组所有的可枚举属性,包括原型。例如上栗的原型方法method和name属性。
Array.prototype.myfun=function(){
alert('myfun');
}
var arr = [0,1,2,3];
for(var i in arr){
console.log(arr[i]);
}
console.log(Array.prototype)
/* 输出结果:
0 1 2 3
ƒ (){
alert('myfun');
}
*/
数组的基础操作方法。
push:尾部追加元素
var length = arr.push(item)
push() 方法用于对数组尾部插入新的元素。返回值为追加后的数组长度。
var nums = [10, 7, 9, 100, 11]
var length = nums.push(2)
console.log(length) // 2
pop:尾部移出元素
var item = arr.pop()
pop() 方法用于删除数组的最后一个元素并返回删除的元素。无参,返回值为删除的元素。
var nums = [10, 7, 9, 100, 11]
var item = nums.pop()
console.log(item) // 11
unshift:头部追加元素
var length = arr.unshift(item)
unshift() 方法用于对数组头部插入新的元素。返回值为追加后的数组长度。
shift:头部移出元素
var item = arr.unshift()
shift() 方法用于对数组头部插移出元素。返回值为追出后的元素。
splice:删除添加替换
var newarr = arr.splice(index, howmany, item)
splice() 方法用于对数组元素进行删除添加替换操作。返回值为删除的元素组成的数组。
index(必填):数组下标,代表从第几个元素开始执行操作。
howmany(可选):规定删除多少个元素,如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
item(可选):插入元素,可以为多个。从下标位置插入。
var nums = [10, 7, 9, 100, 11]
var newarr= nums.splice(2,2,99,77,55)
console.log(newarr) // [9, 100]
console.log(nums) // [10, 7, 99, 77, 55, 11]
注意:splice() 方法会改变原数组。
concat:连接
newarr = arr.concat(nums1, nums2)
concat() 方法用于连接两个或多个数组。
var nums1 = [2,5,7,9]
var nums2 = [1,3,55]
var newarr = []
var newarr = newarr.concat(nums1, nums2)
concat() 方法不会改变原数组。
join:分割
Str = arr.join(separator)
separator:分割符,如果为空,则已 “,” 分割。
join() 方法用于把数组中的所有元素转换一个字符串。
var nums = [10, 7, 9, 100, 11]
var Str = nums.join('x')
console.log(Str) // 10x7x9x100x11
slice:切割
newarr = arr.slice(start, end)
从数组的 [start, end)位置截取数组元素。
slice() 方法可从已有的数组中返回选定的元素。
slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
注意: slice() 方法不会改变原始数组。
includes:查询
boolean = arr.includes(value, start)
value(必填): 查找的元素,可以为字符串或数值。
start(可选):开始查找的位置下标。
includes() 方法用于判断字符串是否包含指定的子字符串。返回值为布尔值。
indexOf:查询
index = arr.indexOf(value, start)
value(必填): 查找的元素,可以为字符串或数值。
start(可选):开始查找的位置下标。
indexOf() 方法用于判断字符串是否包含指定的子字符串。返回值为查询到下标,若为查询到则为 -1。
lastIndexOf()方法类似,返回值为 value 最后一次出现的下标 。
fill:填充/替换
fruits.fill(value, start, end)
value(必填):用来填充数组元素的值。
start(可选):可选开始索引值(包含),默认值为0。
end(可选):可选终止索引(不包含),默认值为 arr.length 。
通常与 new Array 搭配使用。
var arr = new Array(10).fill('10')
// ['10', '10', '10', '10', '10', '10', '10', '10', '10', '10']
或是用于替换掉数组中元素的值。
var arr3 = [0, 1, 2, 3, 4, 5, 6]
console.log(arr3.fill(1, 3)); //[0, 1, 2, 1, 1, 1, 1]
es6中带来的数组高阶方法。
接下来是es6中带来的数组高阶方法。
高阶函数:一个函数如果接收另一个函数作为参数,或者该函数会返回另外一个函数作为返回值的函数,那么这个函数就称之为是一个高阶函数。
数组的高阶方法通常会接收一个回调函数作为参数,在回调中遍历数组,执行操作。
接下来
写在前面:接下来介绍的数组高阶方法,回调函数的写法均采用的是箭头函数的写法,因箭头没有自己的 this 指向,就不介绍第二个参数 thisValue 了。
forEach:迭代(枚举)
arr.forEach((item, index, arr) => { 写想要枚举的操作 })
forEach 方法不会改变原数组,也没有返回值;
var nums = [10, 7, 9, 100, 11]
nums.forEach((item) => {
if (item > 10) {
console.log(item)
}
}) // 100, 11
forEach无法使用 break 跳出循环。使用 return 时,效果和在 for 循环中使用 continue 一致。
forEach如果想要跳出循环,可以通过 throw new Error() 抛出错误的方式实现。
var nums = [10, 7, 9, 100, 11]
nums.forEach((item) => {
if (item == 100) {
throw new Error("miss 100")
} else {
console.log(item)
}
}) // 10 7 9 Error: miss 100
filter:过滤
newarr = arr.filter((item, index, arr) => boolean)
例子:
var nums = [10, 7, 9, 100, 11]
var newNums = nums.filter((item) => {
return item % 2 === 0 // 偶数
})
console.log(newNums) // [10, 100]
console.log(nums) // [10, 5, 11, 100, 55]
返回值是过滤后的新数组
map:映射
newarr = arr.map((item, index, arr) => { 写指定方法体 })
map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。
var nums = [10, 7, 9, 100, 11]
var newNums = nums.map((item) => {
return item * 10
})
console.log(newNums) // [100, 50, 110, 1000, 550]
console.log(nums) // [10, 5, 11, 100, 55]
注意:map 方法中的 callback 函数只需要接受一个参数,就是正在被遍历的数组元素本身。
但这并不意味着 map 只给 callback 传了一个参数(会传递3个参数)。这个思维惯性可能会让我们犯一个很容易犯的错误。
// 下面的语句返回什么呢:
["1", "2", "3"].map(parseInt);
// 你可能觉的会是[1, 2, 3]
// 但实际的结果是 [1, NaN, NaN]
// num.parseInt() , parseInt()接收两个参数,第一个为要转换的字符串,第二个参数是进制数(2-36之间)如果省略该参数或其值为 0,则数字将以 10 为基础来解析,超过返回NaN。
// map的 callback,会给它传递三个参数:当前正在遍历的元素, 元素索引, 原数组本身。第三个参数被忽略
// 所以就相当于执行了,parseInt("1", 0),parseInt("2", 1),parseInt("3", 2),
// 正确的写法应该为:
function returnInt(element){
return parseInt(element,10);
}
["1", "2", "3"].map(returnInt);
// 返回[1,2,3]
find:查找
item = arr.find((item, index, arr) => { boolean })
find()方法用于获取数组中符合指定条件的第一个元素。没有找到返回 undefined。
var family = [
{ name: 'xiaoming', age: 18 },
{ name: 'xiaocheng', age: 40 },
{ name: 'xiaoli', age: 42 }
]
var item = family.find((item) => {
return item.name === 'xiaoming'
})
console.log(item) // { name: 'xiaoming', age: 18 }
注意,返回的item为浅拷贝。
item.name = 'kkk'
console.log(family)
/*
* {name: 'kkk', age: 18}
* {name: 'xiaocheng', age: 40}
* {name: 'xiaoli', age: 42}
*/
这里就反应出 find() 方法返回的结果内存指向依然是 family 所指向的内存地址,
所以这里返回的是浅拷贝的数据。
findIndex:查找下标
index = arr.findIndex((item, index, arr) => { boolean })
findIndex() 返回符合条件的数组第一个元素位置(索引),没有找到符合条件则返回 -1。
var family = [
{ name: 'xiaoming', age: 18 },
{ name: 'xiaocheng', age: 40 },
{ name: 'xiaoli', age: 42 }
]
var index = family.findIndex((item) => {
return item.name === 'xiaoming'
})
console.log(index) // 0
后续遇到常用的,我会慢慢更新的~~~
JavaScript数组操作常用方法的更多相关文章
- JavaScript中数组操作常用方法
JavaScript中数组操作常用方法 1.检测数组 1)检测对象是否为数组,使用instanceof 操作符 if(value instanceof Array) { //对数组执行某些操作 } 2 ...
- RX学习笔记:JavaScript数组操作
RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.un ...
- JavaScript数组对象常用方法
JavaScript数组对象常用方法 方法 形式 返回值 是否改变原数组 描述 concat -items: ConcatArray[] 追加之后的数组 否 连接两个或更多的数组,并返回结果.注意 c ...
- javascript数组操作(创建、元素删除、数组的拷贝)
这篇文章主要介绍了javascript数组操作,包括创建.元素的访问.元素删除.数组的拷贝等操作,还有其它示例,需要的朋友可以参考下 1.数组的创建 复制代码 代码如下: var arrayObj = ...
- JavaScript 数组操作函数--转载+格式整理
JavaScript 数组操作函数(部分)--转载+格式整理 今天看了一篇文章,主要讲的对常用的Js操作函数:push,pop,join,shift,unshift,slice,splice,conc ...
- Javascript数组操作
使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间:思虑下,堪能如此继续之?当狠心深学下方是正道. 原文链接 ...
- Javascript数组操作(转)
1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...
- JavaScript 数组操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript 数组操作 转
javascript之数组操作 1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一 ...
随机推荐
- 【Matlab】简单的滑模控制程序及Simulink仿真
文章: [控制理论]滑模控制最强解析 滑模控制程序及Simulink仿真 这篇文章仿真和输出U的推到有些问题,博主根据此篇文章进行修改进行对sin(t)曲线的追踪(使用滑模控制) 使用滑模控制对sin ...
- HTTP-完整状态码表
HTTP状态码列表: 状态码 状态码英文名称 中文描述 100 Continue 继续.客户端应继续其请求 101 Switching Protocols 切换协议.服务器根据客户端的请求切换协议.只 ...
- 《JavaScript Dom编程艺术》读书笔记(二)
算术操作符 加减乘除这些算术操作中的每一种都必须借助于相应的操作符才能完成.操作符是JavaScript为完成各种操作而定义的一些符号.等号(=).加号(+).减号(-).乘号(*).除号(/). 下 ...
- IOS中弹出键盘后出现fixed失效现象的解决方案
概述 这个问题常出现在移动web开发中聊天或者留言页面的绝对定位输入框上,页面超过屏幕大小时候输入框focus状态下(键盘弹出)绝对定位的元素失效,导致页面滚动时候把定位元素一并带走,体验十分不好,在 ...
- zhilizhili-ui 荡平ie8910 还我前端清净地
zhilizhili-ui 给大家带来一个目前最新版本的ie8方案 特色 flexbox部分功能 vw vh calc部分功能 angular1.4 todo avalon是因为无法和polyfill ...
- 以&#开头的是什么编码?
今天遇到了一个网页时繁体的,它的title和meta信息在浏览器中显示正常,但是查看其源码是却是"最新發"这种. 在网上找了半天资料,终于搞明白了. 以在网页中&#开头的是 ...
- Django + Taro 前后端分离项目实现企业微信登录
前言 还是最近在做的一个小项目,后端用的是Django搭配RestFramework做接口,前端第一次尝试用京东开源的Taro框架来做多端(目前需要做用于企业微信的H5端和微信小程序) 本文记录一下企 ...
- GEOS 使用记录
GEOS 使用记录 官网 https://trac.osgeo.org/geos/ https://libgeos.org/ 下载地址 https://libgeos.org/usage/downlo ...
- Java语言学习day33--8月8日
今日内容介绍1.基本类型包装类2.System类3.Math类4.Arrays类5.大数据运算 ###01基本数据类型对象包装类概述 *A:基本数据类型对象包装类概述 *a.基本类型包装类的产生 在实 ...
- 2021.07.18 P2290 树的计数(prufer序列、组合数学)
2021.07.18 P2290 树的计数(prufer序列.组合数学) [P2290 HNOI2004]树的计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.pru ...