splice()、push()、concat()、split()、indexOf()、map()、join()、forEach()、reduce()、filter()、substr()、substring()
splice()
splice()通过删除现有元素和/或添加新元素来修改数组,并以数组返回原数组中被修改的内容。array.splice(start, deleteCount, item)
其中:start
:指定修改的位置deleteCount
:删除的个数item
:添加进数组的元素,可多个(如无则删除数组元素)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15var array = [1, 2, 4]
// array初始值统一,就不一加了
array.splice(2, 0, 3)
// 第二位开始删除0个元素,在指数2处插入3,其他元素后移。因无修改返回[]
// array为[1, 2, 3, 4]
array.splice(2, 1, 3)
// 第二位开始删除1个元素,在指数2处插入3,其他元素后移。修改了原数组[4]
// array为[1, 2, 3]
array.splice(2, 1)
// 若没有第三个参数则表示只删除
// array为[1,2]
slice()
slice()返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。原始数组不会被改变。使用 Array.prototype.slice.call(伪数组) 可将伪数组转为真正的数组1
2
3var array = [1, 2, 3]
array.slice(0, 2)
// 【1,2】
push()
push()可将一个或多个元素添加到数组的末尾,并返回新数组的长度,改变原数组。1
2
3
4
5var a=['a','b']
a.push('c','d')
//4
a
//(4)["a", "b", "c", "d"]
unshift()
返回值也是数组长度,它的作用是把元素添加到数组开始的位置,改变原数组。pop()
返回值是删除的元素(删除最后一个),改变原数组。shift()
返回值是删除的元素(删除最第一个),改变原数组。
concat()
concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。不会修改原数组。1
2
3var a=['a','b']
a.concat('c','d') //(4) ["a", "b", "c", "d"]
a //(2)["a", "b"]
concat() 也可以用于在字符串后添加元素1
2
3var a = "123"
a.concat('4') // "1234"
a // "123"
push()与 concat()区别
concat()
和push()
都可以合并数组push()
遇到数组参数时,把整个数组参数作为一个元素;而 concat()
则是拆开数组参数,一个元素一个元素地加进去。push()
直接改变当前数组; concat()
不改变当前数组。
此外,push()
只能用于数组,concat()
还能用于合并字符串。1
2
3var a='hello'
a.concat('-nola')
//"hello-nola"
split()
split() 用于把一个字符串分割成字符串数组1
2
3
4
5
6
7
8
9var str="How are you doing today?"
var n=str.split(" ")
//"How", "are", "you", "doing", "today?"]
var n=str.split("")
//["H", "o", "w", " ", "a", "r", "e", " ", "y", "o", "u", " ", "d", "o", "i", "n", "g", " ", "t", "o", "d", "a", "y", "?"]
var n=str.split(" ",3)
//["How", "are", "you"]
var n=str.split("o")
//["H", "w are y", "u d", "ing t", "day?"]
indexOf()
indexOf() 要检索的字符串值没有出现,则该返回 -11
2
3
4var str="Hello world!"
var n=str.indexOf("Hello") //0
var n=str.indexOf("world") //6
var n=str.indexOf("World") //-1 不匹配返回-1
将indexOf()
匹配的所有值的index存进一个数组1
2
3
4
5
6var newArr = [];
var index= arr.indexOf("false");
while (index!= -1) {
newArr.push(index);
index= arr.indexOf("false", index + 1);
}
map()
map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果
join()
join() 方法将一个数组(或一个 类数组对象 )的所有元素连接成一个字符串并返回这个字符串
forEach()
forEach()遍历1
2
3
4
5arr.forEach((node,index,arr)=>{
// node就是每一项的元素
// index 就是每一项的下标
// arr 就是这个数组
})
reduce()
reduce() 把数组的值通过设置参数运算,合并成一个值。1
2
3
4
5var a=[1,2,3,4,5];
a.reduce(function(a,b){
return a+b
})
//15
filter()
filter()把符合的条件的值添加到新数组,原来的数组不变1
2
3
4
5var a=[1,2,3,4,5];
a.filter(function(value,index,array){
return value>3
})
//[4, 5]
substr()
substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。1
2
3
4
5
6//stringObject.substr(start,length)
var str="Hello world!"
var n=str.substr(3)
//lo world!
var n=str.substr(3,7)
//lo worl 从3下标即第四位数开始,后面的7位数(包括空格)
substring()
substring() 方法用于提取字符串中介于两个指定下标之间的字符
实现代码在HTML页面一个一个打出的效果1
2
3//html
<pre id="code"></pre>
<!-- pre标签目的:代码在html中显示时能正常换行 -->
1 | //js |
Array.from()
Array.from() 方法从一个类似数组或可迭代对象中创建一个新的数组实例Array.from(obj, mapFn, thisArg)
,若添加可选函数则相当于:Array.from(obj).map(mapFn, thisArg)
其中:obj
:想要转换成数组的伪数组对象(拥有一个 length 属性和若干索引属性的任意对象)或可迭代对象 (可以获取对象中的元素,如 Map和 Set 等))mapFn
:可选,如果指定了该参数,新数组中的每个元素会执行该回调函数thisArg
:可选,执行回调函数 mapFn
时 this 对象1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25Array.from('foo')
// ["f", "o", "o"]
Array.from([1, 2, 3], x => x + x))
// [2, 4, 6]
Array.from({ length: 2 })
// [undefined, undefined]
Array.from({length:2}).fill(null) // 相当于 new Array(2).fill(null)
// [null, null]
// 一道题目
let obj = {1:222, 2:123, 5:888}
Array.from({length:5}, (item,i) => obj[i+1]||null) // Array.from({length:5}).map((item,i) => data[i+1]||null);
// [222, 123, null, null, 888]
obj.length = 5
let _obj = Array.from(obj).slice(1)
// [222, 123, undefined, undefined, 888]
obj.length = 5
obj[Symbol.iterator] = Array.prototype[Symbol.iterator]
let _obj = [...obj].slice(1)
// [222, 123, undefined, undefined, 888]