js 数组对象的方法 常用API

改变原数组的
ES5
  1. push() //向数组的末尾添加一个或多个元素,返回新数组长度
    语法:arr.push(element1[, ...[, elementN]])

  2. pop() // 用于删除并返回数组的最后一个元素 如果数组为空,返回undefined
    语法:arr.pop()

  3. unshift() //返回新数组长度

  4. shift() // 删除并返回数组的第一个元素 如果数组为空,返回undefined
    语法:arr.shift()

  5. sort() // 对数组的元素进行排序,返回改变后的数组
    语法: arr.sort([compareFunction])
    注意:compareFunction 指定定义排序顺序的函数。如果省略,则将数组元素转换为字符串,然后根据每个字符的Unicode代码点值进行排序。

  6. reverse() // 用于颠倒数组中元素的顺序,返回改变后的数组
    语法:arr.reverse()

  7. splice() // 向数组中添加/删除/替换项目,返回删除的元素,如果仅删除一个元素,则返回一个元素的数组。如果没有删除任何元素,则返回一个空数组。
    语法:array.splice(start[, deleteCount[, item1[, item2[, …]]]])

ES6
  1. copyWithin() // 在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。
    语法:arr.copyWithin(target[, start[, end]])
  2. fill() // 给定值,填充一个数组,value代表填充的数值,start是开始的位置,end是结束的位置(不包括)
    语法:arr.fill(value[, start[, end]])
返回新对象的
ES5
  1. concat() // 连接两个或更多的数组,并返回结果。参数可以是数组或者值
    语法:const new_array = old_array.concat([value1[, value2[, ...[, valueN]]]])

  2. join() //把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。参数不填默认逗号分隔
    语法:arr.join([separator])
    注意:如果元素是undefined,null一个空数组[],它被转换为一个空字符串。

  3. slice()//从某个已有的数组返回选定的元素
    语法:arr.slice([begin[, end]]) //包括begin,不包括end

  4. toString() // 把数组转换为字符串,并返回结果。数组中的元素之间用逗号分隔。
    语法:arr.toString()

  5. toLocaleString() // 把数组转换为本地数组,并返回结果。
    语法:arr.toLocaleString([locales[, options]])
    待扩展

  6. Array.isArray(arr) //判断arr是否是一个数组类型
    当Array.isArray不存在可以用Object.prototype.toString.call(arr) === ‘[object Array]’

  7. indexOf() // 返回可以在数组中找到给定元素的第一个索引;如果不存在,则返回-1
    语法:arr.indexOf(searchElement[, fromIndex])

  8. lastIndexOf() //返回可以在数组中找到给定元素的最后一个索引;如果不存在,则返回-1。
    语法:arr.lastIndexOf(searchElement[, fromIndex])

ES5 参数是一个callback
  1. every() // 如果回调函数每个数组元素都为true,返回一个true,否则,false。返回一个布尔值
    语法:arr.every(callback(element[, index[, array]])[, thisArg])
    注意:(修改,添加和删除)影响初始数组
  2. some() // 数组中的**至少一个元素为true,**返回true,否则,false,返回一个布尔值
    语法:arr.some(callback(element[, index[, array]])[, thisArg])
  3. filter() // 返回通过测试的元素的新数组,没有通过测试的,返回一个空数组。
    语法:let newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
  4. reduce() // 最终返回一个值
    语法:arr.reduce(callback( accumulator, currentValue[, index[, array]] )[, initialValue])
    参数:accumulator:累加器,currentValue:当前值, initialValue:初始值
  5. reduceRight() // 从右到左累加 与reduce相反
    语法:arr.reduceRight(callback(accumulator,currentValue [,index [,array]])[,initialValue])
ES6
  1. find() //用于找出第一个符合条件的数组成员
    语法:arr.find(callback(element[, index[, array]])[, thisArg])
  2. findIndex() 返回第一个符合条件的数组成员的位置
    语法:arr.findIndex(callback(element[, index[, array]])[, thisArg])
  3. includes() // 表示某个数组是否包含给定的值,返回一个布尔值
    语法:arr.includes(valueToFind[, fromIndex])
  4. flat() //用于将嵌套的数组“拉平”,变成一维的数组。
    语法:var newArray = arr.flat([depth])
    可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1。
    如果不管有多少层嵌套,都要转成一维数组,可以用Infinity关键字作为参数。
  5. flatMap() //方法对原数组的每个成员执行一个函数,flatMap()只能展开一层数组。
    语法:
    var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
        // return element for new_array
    }[, thisArg])
    
ES5其他
  1. forEach() // 遍历数组,没有返回值,也不会改变原数组,
    语法:arr.forEach(callback(currentValue [, index [, array]])[, thisArg])
    注意:

    forEach()除了抛出异常外,没有其他方法可以停止或中断循环。如果您需要这种行为,该forEach()方法是错误的工具。
    提前终止可以通过以下方式完成:
    一个简单的for循环
    一对…的 / 为…在 循环
    Array.prototype.every()
    Array.prototype.some()
    Array.prototype.find()
    Array.prototype.findIndex()
    数组方法:every(),,some()和find(),并findIndex()使用返回真实值的谓词测试数组元素,以确定是否需要进一步迭代。

  2. map() //遍历数组
    语法:

    let new_array = arr.map(function callback( currentValue[, index[, array]]) {
        // return element for new_array
    }[, thisArg]) 
    
ES6其他
  1. 扩展运算符(…)
    rest参数的逆运算,将一个数组转为逗号分隔的参数序列
    // 注意:1、只有函数调用时,扩展运算符才可以放在圆括号中,否则会报错 2、替代函数的apply方法
    // 应用:

    1. 复制数组
    2. 合并数组(…为浅拷贝,concat也是浅拷贝)
    3. 与解构赋值结合
    	// ES5
    	a = list[0], rest = list.slice(1)
    	// ES6
    	[a, ...rest] = list
    
    1. 字符串 : 扩展运算符还可以将字符串转为真正的数组。
    	[...'hello']
    	// [ "h", "e", "l", "l", "o" ]
    

    扩展:识别四个字节的Unicode字符

    1. 实现了Iterator接口的对象
      任何定义了遍历器(Iterator)接口的对象(参阅 Iterator 一章),都可以用扩展运算符转为真正的数组。
  2. Array.from():用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象,将字符串转为数组
    // Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组

    Array.from(arrayLike, x => x * x);
    // 等同于
    Array.from(arrayLike).map(x => x * x);
    
    Array.from([1, 2, 3], (x) => x * x)
    // [1, 4, 9]
    
  3. Array.of() // 用于将一组值,转换为数组
    语法:Array.of(element0[, element1[, ...[, elementN]]])

  4. entries() // 用于遍历数组,是对键名的遍历
    语法:array.entries()

  5. keys() // 用于遍历数组,是对键值的遍历
    语法:array.keys()

  6. values() // 用于遍历数组,是对键值对的遍历
    语法:array.values()

数组的空位
ES5

ES5 对空位的处理,已经很不一致了,大多数情况下会忽略空位。

  • forEach(), filter(), reduce(), every() 和some()都会跳过空位。
  • map()会跳过空位,但会保留这个值
  • join()和toString()会将空位视为undefined,而undefined和null会被处理成空字符串。
ES6
  • Array.from方法会将数组的空位,转为undefined

  • 扩展运算符(…)也会将空位转为undefined。

  • copyWithin()会连空位一起拷贝。

  • fill()会将空位视为正常的数组位置。

  • for…of循环也会遍历空位。

  • 上面代码中,数组arr有两个空位,for…of并没有忽略它们。如果改成map方法遍历,空位是会跳过的。

  • entries()、keys()、values()、find()和findIndex()会将空位处理成undefined。
    -如果原数组有空位,flat()方法会跳过空位

扩展:关于数组的一些面试题
参考链接

  1. 复制数组
  2. 合并数组
  3. 删除数组
  4. 数组去重
  5. 将字符串转为数组
  6. 将类数组转为数组
  7. 数组的遍历?有什么区别?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值