持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
语法
array.some(function(item, index, arr), ins)
参数
参数1:回调函数(必需)
参数2:传递给回调函数的this指针(可选)
注:当回调函数是箭头函数时,参数2无效,始终指向全局window变量
回调函数
参数1:当前元素
参数2:当前元素的下标
参数3:原数组
let list = [1, 2, 3];
list.some((item, index, arr) => {
console.log(item, index, arr);
});
this指针
let list = [1, 2, 3];
let ins = { haha: '我的传进来的this' };
list.some(function () {
console.log(this);
}, ins);
如果不传,默认是全局window变量:
let list = [1, 2, 3];
list.some(function () {
console.log(this);
});
返回值
布尔值。如果数组中有元素满足条件返回 true,否则返回 false
let list = [1, 2, 3];
let res = list.some(item => item > 1);
console.log(res);
所有条件都不满足,返回false
let list = [1, 2, 3];
let res = list.some(item => item > 3);
console.log(res);
遍历情况
let list = [1, 2, 3];
list.some((item) => {
console.log(item);
return item > 1;
});
可以看到并没有将数组所有元素都打印了,说明在找到满足条件的元素以后,就会结束遍历。
总结
some在遍历过程中只要有一个元素满足条件就会结束遍历,并且返回true,如果遍历完整个数组都没有满足条件的元素则返回false
手写
理清需求
- 函数接收
2个参数,一个回调函数,一个this指向 - 函数会遍历数组每一项,如果有一个元素通过,则返回
true,如果所有元素都没有通过则返回false - 回调函数接收
3个参数:当前元素、下标、原数组 - 回调函数可通过函数的第二个参数改变
this指向 根据需求,不难写出以下代码:
Array.prototype._some = function (callback, ins) {
let res = false;
for (let i = 0; i < this.length; i++) {
if (callback.call(ins, this[i], i, this)) {
res = true;
break;
}
}
return res;
}
测试
let list = [1, 2,3];
let res = list._some(function(item, index, arr){
console.log(item, index, arr);
console.log(this);
return item > 1;
}, {haha: '我是传进来的this'});
console.log(res);
原生测试
let list = [1, 2,3];
let res = list.some(function(item, index, arr){
console.log(item, index, arr);
console.log(this);
return item > 1;
}, {haha: '我是传进来的this'});
console.log(res);
打印结果一样,莫得毛病!
结语
今天关于数组some的介绍就讲到这里,关注我获取更多有关数组方法的讲解,后续会持续更新。我是末世未然,一个爱折腾的新晋奶爸,祝好