js 数组中方法总结

都是基础 必须掌握! 网上找找资料认认真真敲一边,算是有了个大概的认识!

改变原数组的方法(9个):

pop()  a.shift()  push()  unshift()  reverse()  splice()   sort()

ES6:  copyWithin() fill

不改变原数组的方法(8个):

ES5:
join、toLocateString、toStrigin、slice、cancat、indexOf、lastIndexOf、
ES7:
includes


原数组不变的方法

  • slice()       从原数组中指定开始下标到结束下标之间的项   返回新数组 

  • concat()    合并数组 返回新数组

  • join()         指定的分隔符进行分隔  返回分割后的字符串

原数组改变的方法

  • push()添加元素到数组尾部  返回新数组长度 

  • splice()  删除元素,并向数组添加新元素    返回删除元素

  • pop()   尾部删除  返回新数组

  • reverse()数组反序  返回反序的数组

  • sort() 

  • es6  Array.of() 返回由所有参数值组成的数组
var numbers = [1,2,3,4,5,4,3,2,1];
var result = Array.of(numbers);
console.log(result) //[1,2,3,4,5,4,3,2,1];
  • es6 Array.from() 将类转化为数组
1. 对象拥有length属性
var obj = {0:'zj', 1:'27', 2:'female', length: 3};
var result = Array.from(obj);
console.log(result);///["zj", "27", "female"]

//部署了 Iterator接口的数据结构 比如:字符串、Set、NodeList对象
// let arr = Array.from('hello'); 
// console.log(arr)// ['h','e','l','l']

// let arr = Array.from(new Set(['a','b']));
// console.log(arr);// ["a", "b"]

  • forEach 和for 循环类似 
var numbers = [1,2,3,4,5,4,3,2,1];
numbers.forEach(function(item,index,array){
    if (item !=2 ) {
        numbers.splice(index,1,2)
    }
})
console.log(numbers)// [2, 2, 2, 2, 2, 2, 2, 2, 2]
  • es5  every对数组中每一项进行给定函数,如果每一项都返回true,则返回true
var numbers = [1,2,3,4,5,4,3,2,1];
var temparr = numbers.every(function(item,index,numbers){
    return item<3;
})
console.log(temparr)//false
  • some 对数组每一项给定函数,如果任意一项都返回true,则返回true
var numbers = [1,2,3,4,5,4,3,2,1];
var temparr = numbers.some(function(item,index, array){
    return item >3;
})
console.log(temparr);//true
  • filter 对数组中每一项给定函数,返回true 组成的数组
var numbers = [1,2,3,4,5,4,3,2,1];
var temparr = numbers.filter(function(item,index,array) {
    return item>3;
});
console.log(temparr);//[4,5,4]
  • map 对数组中每一项给定函数,返回每次调用结果组成的数组
var numbers = [1,2,3,4,5,4,3,2,1];
var temparr = numbers.map(function(item,index,array) {
    return item + 1;
})
console.log(temparr);//[4,5,4]
  • 两个归并数组的方法:reduce()和reduceRight()。这两个方法迭代数组所有项,然后构建一个最终返回的值。reduce从左到右,reduceRight从右到左。

reduce()函数接受四个参数;前一个值、当前值、index和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在第二项上,因此第一个参数是数组的第一项,第二个参数是数组的第二项。

var numbers = [1,2,3,4];
var result = numbers.reduce(function(prev,cur,index,array){
    return prev * cur;
})
console.log(result) //10

find():返回通过测试的数组的第一个元素的值  原数组不变

语法:

array.find(function(value, index, arr),thisValue)

value:必须,代表当前元素,其他四个参数都是可选,index代表当前索引值,arr代表当前的数组,thisValue代表传递给函数的值,一般用this值,如果这个参数为空,undefined会传递给this值

返回值:返回符合测试条件的第一个数组元素的值,如果没有符合条件的则返回undefined。

  let arr= [1,3,4,5,6,9]
    let temp = arr.find(value => {
       return value >3;
    })

    console.log(temp) //4
    console.log(arr) // [1, 3, 4, 5, 6, 9]


  • ES7 includes() 查找数组是否包含某个元素 返回布尔

定义: 返回一个布尔值,表示某个数组是否包含给定的值

语法:

array.includes(searchElement,fromIndex=0)
参数:

searchElement(必须):被查找的元素

fromIndex(可选):默认值为0,参数表示搜索的起始位置,接受负值。正值超过数组长度,数组不会被搜索,返回false。负值绝对值超过长数组度,重置从0开始搜索。

includes方法是为了弥补indexOf方法的缺陷而出现的:

  1. indexOf方法不能识别NaN
  2. indexOf方法检查是否包含某个值不够语义化,需要判断是否不等于-1,表达不够直观
let a = [NaN,'a','zhu',1];
let b = a.includes('zhu') // true
console.log(b)
let c = a.includes('a',100)
console.log(c)// false  超过数组长度 不搜素
let d = a.includes('a',-3)
console.log(d)//true
let e = a.includes(NaN, -100)
console.log(e)//true 负值绝对值超过数组长度,搜索整个数组
  • for...of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等。

语法

for (variable of iterable) {
    statement
}

variable:每个迭代的属性值被分配给该变量。

iterable:一个具有可枚举属性并且可以迭代的对象。

    1.Arrays(数组)

let iterable = ['a', 'b', 'c'];
for(let value of iterable) {
    console.log(value) // a b c
}

 2. maps(映射) Map 对象就是保存 key-value(键值) 对。对象和原始值可以用作 key(键)或 value(值)。Map 对象根据其插入方式迭代元素。

 let iterable = new Map([['one',1],['two',2]]);
 for( let [key,value] of iterable)
 {
    console.log(`Key:${key} and Value:${value}`) //Key:one and Value:1 //Key:two and Value:2
 }

3. Set(集合) 对象允许你存储任何类型的唯一值,这些值可以是原始值或对象。 Set(集合) 对象只是值的集合。 Set(集合) 元素的迭代基于其插入顺序。 Set(集合) 中的值只能发生一次。如果您创建一个具有多个相同元素的 Set(集合) ,那么它仍然被认为是单个元素。

let iterable = new Set([1,4,4,1,3,2,1]);
for(let value of iterable){
    console.log(value) //1 //4 //3 //2
}

4. String(字符串)

let iterable = 'hello'
for(var value of iterable){
    console.log(value) //h //e //l //l //o 对字符串执行迭代,并打印出每个索引上的字符。
}

5.Arguments Object(参数对象) 把参数看成一个类数组对象 并且对应于传递给函数的参数

arguments 会接收传入 args() 函数的任何参数
function args(){
    for(let arg of arguments){
        console.log(arg); // 1 //2 //3
    }
}
args(1,2,3)

6.Generators(生成器) 通过迭代器控制生成器乘车对象

function* generator(){
    yield 1;
    yield 2;
    yield 3;
}

for(let g of generator()){
    console.log(g);//1 //2 //3
}

7.退出迭代 break、continue、return 和 throw

let iterable = ['a','b','c'];
for(let value of iterable){
    console.log(value);
    break;//a break 关键字在一次执行后终止循环,所以只有 a 被打印出来
}

8.普通对象不可迭代

let obj= {name:'zz', age:28};
for(let value of obj)
{
    console.log(value) //Uncaught TypeError: obj[Symbol.iterator] is not a function
}

通过Array.from对象转化为数组进行迭代

猜你喜欢

转载自blog.csdn.net/MeetLunay/article/details/83382777