js常用的数组方法

1.filter() 不会改变原始数组,新数组中的元素是过滤指定数组中符合条件的所有元素

两种写法区别:有return 的加了{},否则没有return不需要加{}

var aa = [1, 2, 3, 4, 4, 5, 6, 6];

var bb = aa.filter((item, index, self) => {

  return self.indexOf(item) === index     

})

console.log(bb);  //  [1, 2, 3, 4, 5, 6]
var aa = [1, 2, 3, 4, 4, 5, 6, 6];

var bb = aa.filter((item, index, self) => 

  self.indexOf(item) === index     

)

console.log(bb);  //  [1, 2, 3, 4, 5, 6]

indexOf找到数组中第一个符合条件的元素位置,没找到指定元素则返回 -1

ES6方法去重    (转载数组去重的多种方法)https://blog.csdn.net/xing476255461/article/details/100067006?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=3c3d39b4-75e7-4cde-8eac-b369ff0bf0db&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control'

var arr = [1, 2, 3, 4, 4, 5, 6, 6];
// Set可利用扩展运算符转为数组哦
const newArr = [...new Set(arr)]
console.log(newArr); // [1, 2, 3, 4, 5,6]
var arr = [1, 2, 3, 4, 4, 5, 6, 6];
var set = new Set(arr);
var newArr = Array.from(set);
console.log(newArr); // [1, 2, 3, 4, 5,6]

2.map() 不会改变原始数组,新数组中的元素为按原始数组顺序依次处理元素后的值,同样有两种写法

var aa = [1, 2, 3, 4, 4, 5, 6, 6];

var bb = aa.map((item) => {

  return item = item * item

})

console.log(bb); //  [1, 4, 9, 16, 16, 25, 36, 36]

3.every() 不会改变原始数组,检测数组所有元素是否都符合指定条件,全部通过返回true,否则返回false(所有项满足返回true)

  • 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测
  • 如果所有元素都满足条件,则返回 true
var aa = [1, 2, 3, 4, 4, 5, 6, 6];

var bb = aa.every((item) => {

  return item != 3

})

console.log(bb); //  false

4.some() 不会改变原始数组,检测数组中的元素是否满足指定条件,只要有一个通过返回true,否则返回false(只要一项满足返回true)

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测
  • 如果没有满足条件的元素,则返回false
var aa = [1, 2, 3, 4, 4, 5, 6, 6];

var bb = aa.some((item) => {

  return item != 3

})

console.log(bb); // true

5.findIndex() 不改变原始数组,找到符合条件的数组第一个元素位置

  • 当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数
  • 如果没有符合条件的元素返回 -1
var aa = [1, 2, 4, 4, 5];

var bb = aa.findIndex(item => {

  return item > 3

});

console.log(bb); // 2

6.find()不改变原始数组,找到符合条件的数组的第一个元素的值

  • 当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数
  • 如果没有符合条件的元素返回 undefined
var aa = [1, 2, 4, 4, 5];

var bb = aa.find(item => {

  return item > 3

});

console.log(bb); // 4

7. slice() 不会改变原始数组,从已有的数组中返回选定的元素,截取组成新字符串(数组截取)

var aa = [1, 2, 3, 4, 4, 5, 6, 6];

var bb = aa.slice(2,4)

console.log(bb); // [3, 4]

8.splice() 改变原始数组,用于添加或删除数组中的元素(数组更新)

第一个元素是从何处添加/删除元素,第二个元素是删除多少元素,第三个元素(不必填)是要添加到数组的新元素

var aa = [1, 2, 3, 4, 4, 5, 6, 6];

aa.splice(3,4,2)   // 从第3位开始删除4个元素,并把2添加进删除的位置

console.log(aa); //[1, 2, 3, 2, 6]

9.join()不改变原数组,数组转字符串

var aa = [1, 2, 3, 4, 4, 5, 6, 6];

var bb = aa.join()

console.log(bb); // 1,2,3,4,4,5,6,6

["黑色", "L", "7分甜"].join()
"黑色,L,7分甜"

10. split()不改变原字符串,字符串变数组

var aa = '1,2,3,4,4,5,6,6';

var bb = aa.split(',')

console.log(bb); // ["1", "2", "3", "4", "4", "5", "6", "6"]

"黑色,L,7分甜".split(',')
["黑色", "L", "7分甜"]

11. 遍历数组方法 keys()、values()、entries()

keys()是对键名的遍历

let aa = ["a", "b", "c", "d"];

for (let index of aa.keys()) {

  console.log(index);

}

values()对键值的遍历

let bb = ["a", "b", "c", "d"];

for (let item of bb.values()) {

  console.log(item);

}

entries()是对键值对的遍历

let arr = ["a", "b", "c", "d"];

for (let i of arr.entries()) {

  console.log(i);

}

for (let [index, item] of arr.entries()) {

  console.log(index + ":" + item);

}

经典执行顺序:

setTimeout( function(){ //事件
    console.log(1); 
}, 0) 
new Promise(function executor(resolve){
    console.log(2); //主线程
    for(var i = 0; i < 1000; i++){
      i = 9999 && resolve(); 
    }
    console.log(3); //主线程
}).then(function(){
    console.log(4); //最后
}) 
console.log(5); //主线程


结果:2, 3, 5, 4, 1
原因:先执行promise的主线程即then之前,最后执行then,它是promise主线程的最后,除了定时器,事件,ajax之外也算是promise的主线程

var funcs = []
for (var i = 0; i < 10; i++) {
    funcs.push(function() {  
       console.log(i)
    })
}
funcs.forEach(function(func) {
       func()
})


结果:(共10遍10)
要想输出0-9 ,把var i=0 改成let i=0
原因:for循环不是在一个方法体中,所以for循环中的i是全局变量,最终循环结束,i保存在内存中不会马上销毁,所以你在for循环结束的时候可以看到i=10

for ……in 和 for ……of的区别

for in是遍历(object)键名,for of是遍历(array)键值。

var obj = {a:1, b:2, c:3};
    
for (let key in obj) {
  console.log(key);
}

// a
// b
// c
const array1 = ['a', 'b', 'c'];

for (const val of array1) {
  console.log(val);
}

// a
// b
// c

for of不可以遍历普通对象,想要遍历对象的属性,可以用for in循环, 或内建的Object.keys()方法

总结:for in 一般用来遍历对象的keyfor of 一般用来遍历数组的value

根据数组中对象的某一个属性值进行排序

var arr = [
    {name:'yy',age:7},
    {name:'hh',age:18},
    {name:'ll',age:8},
    {name:'ll',age:18}
];
var arr1 = [];
function sorts_fun(arr) {
    return function(a, b) {
        var v1 = a[arr];
        var v2 = b[arr];
        return v1 - v2;
    };
}
arr1 = arr.sort(sorts_fun('age'));

为什么typeof arr 返回的是对象object

数组本身也是对象

判断是否是数组和对象 用typeof 是分辨不出来的 

应该用Array.isArray()

或者用 arr instanceof Array

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值