前端常用方法整理与区分(字符串,数组,对象)

前端关于对象,数组,字符串的方法很多,有些方法功能上很接近,但是在具体的使用上面还是有差异的。

就好比:

1、有些是在原数组上修改,有些是创建一个新的数组,原数组不变。

2、有些只能处理字符串,有些只能处理数组,有些可以同时处理两者

3、有些方法直接调用,有些方法中要放参数。

特别像我这种鱼的记忆,几天不用就忘干净了。特此整理一下,持续更新中!

1.字符串类

split()

作用:字符串分割成数组

一个参数(必填),以这个参数为分割标准

返回:数组

栗子:

const str = '12345';
const arr = str.split(''); // [1,2,3,4,5]

trim()

作用:消除字符串两头的空格

无参数

返回:字符串

const str = '  abc  ';

str.trim() // "abc"

substring()

作用:提取下标之间的字符,包括开始处的字符,但不包括结束处的字符

第一个参数必填,第二个参数选填

返回值:字符串

const str = 'Hello world!';

str.substring(3) // "lo world!"
str.substring(3, 7) // "lo w"

startsWith(), endsWith() 

作用:参数字符串是否在原字符串的头部/尾部(ES6新增)

第一个参数(必填),表示查找的字符串/字符;第二个参数(选填),表示开始搜索的位置。

返回:布尔值

栗子:

let s = 'Hello world!';

s.startsWith('Hello') // true
s.endsWith('!') // true

s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true

repeat()

作用:将原字符串重复n次(ES6新增)

一个参数(必填)

返回:新字符串

栗子:

'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""

replace()

作用:字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

第一个参数(必填),子字符串或正则表达式;第二个参数(必填),替换文本或生成替换文本的函数。

返回:新字符串

const str="hello world!";
str.replace("world","china"); // hello china!

2.数组类

join()

作用:数组拼接成字符串

一个参数(必填),以这个参数为拼接标准

返回:字符串

栗子:

var arr=[1,2,3,4,5];
var str=arr.join('');    //str='12345'

slice()

作用:截取数组中的某些元素。

两个参数,第一个(必填)从那个元素开始,0代表第一个元素;第二个(选填)是到那个元素结束,不包含结束元素!不填则视为后面的全部

返回:新数组,不更改原数组

栗子:

//常规
var arr=[1,2,3,4,5];
var test=arr.slice(2,3);   //arr=[1,2,3,4,5]   test=[3]

//只有一个参数
var arr=[1,2,3,4,5];
var test=arr.slice(2);   //arr=[1,2,3,4,5]   test=[3,4,5]

//当参数为负数,从后面往前数相应的个数为开始
var arr=[1,2,3,4,5];
var test=arr.slice(-2);   //arr=[1,2,3,4,5]   test=[4,5]

splice()

作用:向/从数组中添加/删除项目,然后返回被删除的项目。

个参数,第一个(必填)从那个元素开始删除,删除时包含此元素,0代表第一个元素;第二个(必填)是删除元素的个数,参数为0时视为没有删除元素,官方要求这个参数为必填,实际可以不填,视为删除后面的全部;第三个往后(选填)全部都是添加的元素。

注意事项:调用此方法会有返回值,并且会修改原数组

返回:由被删除元素构成的数组,更改原数组

栗子:

//只有一个参数
var arr = [1,2,3,4,5];
var test = arr.splice(3);   //arr=[1,2,3]   test=[4,5]

//两个参数
var arr = [1,2,3,4,5];
var test = arr.splice(3,1);   //arr=[1,2,3,5]   test=[5]

//两个参数且第二个参数为0
var arr = [1,2,3,4,5];
var test = arr.splice(3,0);   //arr=[1,2,3,4,5]   test=[]

//两个参数且第二个参数为负数(负数视为0)
var arr = [1,2,3,4,5];
var test = arr.splice(3,-1);   //arr=[1,2,3,4,5]   test=[]

//三个参数及以上
var arr = [1,2,3,4,5];
var test = arr.splice(3,2,8,9,10);   //arr=[1,2,3,8,9,10]   test=[4,5]

sort()

作用:对数组的元素进行排序

个参数(选填),规定排序顺序,必须是函数

注意事项:直接调用函数,不加参数的情况很坑!!!坑的地方在于sort函数在比较时,会调用每个数组项的toString()转型方法,即会将每一项转化为ASCII进行比较。这就很难保证按照数字的大小进行排序,特别是同时出现正负数和零。解决方式就是使用函数作为参数,增强排序的稳定性

返回:无返回值,更改原数组

栗子:

//顺序排序(不带参数)
var arr = [8,4,6,1,7];
arr.sort();                  //arr=[1,4,6,7,8]
var test = arr.sort();       //arr=[1,4,6,7,8]   test=[1,4,6,7,8]

//顺序排序(不带参数)出现的问题
var arr = [0,1,5,10,15];
arr.sort();                  //arr=[0,1,10,15,5]   结果没有按照顺序

//顺序排序(增强稳定)
function compare(a,b){        
    return a-b;
}

var arr = [0,1,5,10,15];
arr.sort(compare);                  //arr=[0,1,5,10,15]  

reverse()

作用:颠倒数组中元素的顺序

无参数

返回:无返回值,更改原数组

栗子:

var arr = [1,2,3,4,5];
arr.reverse();               //arr=[5,4,3,2,1]
var test = arr.reverse()     //arr=[5,4,3,2,1]  test=[5,4,3,2,1] 

concat()

作用:数组拼接

一个(必填)或者多个参数,多个参数意味着同时拼接多个数组,参数类型为数组

返回:返回拼接后的副本,不更改所有原数组

var arr1=[1,2,3,4,5];
var arr2=[3,4,5,6,7];
alert(arr1.concat(arr2))      //[1,2,3,4,5,3,4,5,6,7]   arr1=[1,2,3,4,5]  arr2=[3,4,5,6,7]
var test=arr1.concat(arr2)    //test=[1,2,3,4,5,3,4,5,6,7]

 reduce(重要)

作用:对数组中的每个元素执行一个由您提供的reducer函数(升序执行)

这个api在某些场景特别好用,相较于数组中基础的api,稍有难度。理解不清楚经常会出现莫名的bug

返回:将其结果汇总为单个返回值

语法
array.reduce(function(accumulator, currentValue, currentIndex, arr), initialValue)

参数			描述
accumulator		必需。累计器。
currentValue	必需。当前元素
currentIndex	可选。当前元素的索引
arr				可选。当前元素所属的数组对象。
initialValue	可选。传递给函数的初始值

单单是这样的话没有太多难度,主要是以下特殊的地方:

回调函数第一次执行时,accumulator 和currentValue的取值有两种情况:

1、如果调用reduce()时提供了initialValueaccumulator取值为initialValuecurrentValue取数组中的第一个值

2、如果没有提供 initialValue,那么accumulator取数组中的第一个值,currentValue取数组中的第二个值。 

注意:如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。

如果数组为空且没有提供initialValue,会抛出TypeError。

如果数组仅有一个元素(无论位置如何)并且没有提供initialValue, 或者有提供initialValue但是数组为空,那么此唯一值将被返回并且callback不会被执行。

所以,提供初始值通常更安全,正如下面的例子,如果没有提供initialValue,则可能有四种输出:

var maxCallback = ( acc, cur ) => Math.max( acc.x, cur.x );
var maxCallback2 = ( max, cur ) => Math.max( max, cur );

// reduce() 没有初始值
[ { x: 2 }, { x: 22 }, { x: 42 } ].reduce( maxCallback ); // NaN
[ { x: 2 }, { x: 22 }            ].reduce( maxCallback ); // 22
[ { x: 2 }                       ].reduce( maxCallback ); // { x: 2 }
[                                ].reduce( maxCallback ); // TypeError

// map/reduce; 这是更好的方案,即使传入空数组或更大数组也可正常执行
[ { x: 22 }, { x: 42 } ].map( el => el.x )
                        .reduce( maxCallback2, -Infinity );

 reduce可以帮忙解决数组去重以及对象数组去重

数组去重:

let myArray = ['a', 'b', 'a', 'b', 'c', 'e', 'e', 'c', 'd', 'd', 'd', 'd']
let myOrderedArray = myArray.reduce(function (accumulator, currentValue) {
  if (accumulator.indexOf(currentValue) === -1) {
    accumulator.push(currentValue)
  }
  return accumulator
}, [])

console.log(myOrderedArray)

对象数组去重:

/**
 * 数组对象去重
 * 设置cur默认类型为数组,并且初始值为空的数组
 */
let obj = {};
arrList = arrList.reduce((cur,next) => {
	obj[next.value] ? "" : obj[next.value] = true && cur.push(next);
	return cur;
},[]);

// 这里得出去重后的数据
console.log(arrList);

4.处理多种数据格式类

includes

作用:1.从数组中是否找到了参数项。2.从字符串中是否找到了参数字符串

返回:根据情况,如果包含则返回 true,否则返回 false

// 数组
const arr = [1,2,3,4,5];
arr.includes(1) // true
arr.includes(6) // false

// 字符串
const str = 'hello world!'
str.includes('ll') // true
str.includes('oo') // false

indexOf

作用:找到一个给定元素的第一个索引

返回:数组所在位置的索引值,找不到返回-1

var arr = [1,2,3,4,5];
arr.indexOf(1) //0
arr.indexOf(5) //4
arr.indexOf(6) //-1

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值