几种常用js方法整理

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
15
var 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
3
var array = [1, 2, 3]
array.slice(0, 2)
// 【1,2】

push()

push()可将一个或多个元素添加到数组的末尾,并返回新数组的长度,改变原数组。

1
2
3
4
5
var a=['a','b']
a.push('c','d')
//4
a
//(4)["a", "b", "c", "d"]

unshift()返回值也是数组长度,它的作用是把元素添加到数组开始的位置,改变原数组。
pop()返回值是删除的元素(删除最后一个),改变原数组。
shift()返回值是删除的元素(删除最第一个),改变原数组。

concat()

concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。不会修改原数组。

1
2
3
var a=['a','b']
a.concat('c','d') //(4) ["a", "b", "c", "d"]
a //(2)["a", "b"]

concat() 也可以用于在字符串后添加元素

1
2
3
var a  = "123"
a.concat('4') // "1234"
a // "123"

push()与 concat()区别

concat()push()都可以合并数组
push() 遇到数组参数时,把整个数组参数作为一个元素;而 concat() 则是拆开数组参数,一个元素一个元素地加进去。
push() 直接改变当前数组; concat() 不改变当前数组。
此外,push() 只能用于数组,concat() 还能用于合并字符串。

1
2
3
var a='hello'
a.concat('-nola')
//"hello-nola"

split()

split() 用于把一个字符串分割成字符串数组

1
2
3
4
5
6
7
8
9
var 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() 要检索的字符串值没有出现,则该返回 -1

1
2
3
4
var 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
6
var 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
5
arr.forEach((node,index,arr)=>{
// node就是每一项的元素
// index 就是每一项的下标
// arr 就是这个数组
})

reduce()

reduce() 把数组的值通过设置参数运算,合并成一个值。

1
2
3
4
5
var a=[1,2,3,4,5];
a.reduce(function(a,b){
return a+b
})
//15

filter()

filter()把符合的条件的值添加到新数组,原来的数组不变

1
2
3
4
5
var 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
2
3
4
5
6
7
8
9
//js
let n = 0
let timer = setInterval(()=>{
n += 1
code.innerText = result.substring(0,n)
},100)
let result= `
/*你好,我是Nola*/
`

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
25
Array.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]