JS数组方法every,some,map区别
定义与用法:
every()方法用于检测数组中所有元素是否都符合指定条件,若符合返回true,否则返回false;
some()方法用于检测数组中的元素是否有满足指定条件的,若满足返回true,否则返回false;
every()
1.语法:array.every(function(item,index,array){
//item:当前元素的值;
//index:当前元素的索引;
// array:当前元素的数组对象;
})
2.every()方法使用指定函数检测数组中的所有元素;
如果数组中检测到有一个元素不满足,则整个表达式返回false,且剩余的元素不会再进行检测。如果所有 元素都满足条件,则返回true;
3.注意:every()不会对空数组进行检测;
every()不会改变原来的数组
some()
1. 语法:array.some(function(item,index,array){
//item:当前元素的值;
//index:当前元素的索引;
// array:当前元素的数组对象;
})
2. some()方法会依次执行数组的每个元素;
如果有一个元素满足条件,则表达式返回true,剩余的元素不会再执行检测。如果没有满足条件的元素,则返回false
3.注意:some()不会对空数组进行检测;
some()不会改变原始数组;
map()
1.语法:array.map(function(value, index, array))
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测。
注意: map() 不会改变原始数组。
2.调用map数组,不同的是:
如果给定处理函数的表达式是运算表达式,它返回的是每一项运算后的结果的数组
如果给定的处理函数的表达式是逻辑判断,它返回的是布尔值组成的数组
但是我发现,some与map 都不能对空数组进行数据检测,我就试了一下
发现some为false,但是map就不一样了
map打印出的是空数据
感觉哪里怪怪的,事情好像并不是那么简单的样子。所以仔细思考一下,得出一个简单的结论:
map是可以遍历空数组的。但是 map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。 也就是会以arr为原数组生成新数组返回。这个时候 打印 arr == arrRes 应该是 false
其实就是涉及到,栈内存,堆内存的问题。因为 arr。map返回的是一个新数组 在堆空间开辟了一块空间 产生了一个新的地址值arrRes 指向的就是这个新的地址值 所以 arr == arrRes 或 arr === arrRes 就是false
以上个人总结,有不对的地方请指正。