/**
* @function Array.prototype.every
* @description 循环遍历数组每个元素是否全部符合给定条件,全部符合则返回true,否则返回false
* @param callback callback三个参数:1.当前值。2.当前索引(可选)3.当前数组(可选)
* @param thisArg 可选参数,callback被调用时,this都会指向thisArg参数,不指定时this指向全局对象
*/
Array.prototype.every = function (callback: { call: (arg0: any, arg1: number, arg2: any[]) => any; }, thisArg: any) {
// null | undefined 不能调用方法
if ((!this && typeof this === 'object') || typeof this === 'undefined') {
throw new Error(`Uncaught TypeError: Cannot read properties of ${this}`)
};
if (typeof callback !== 'function') {
throw new Error(`${callback} is not a function`)
}
// 获取数组
const arr = Object(this);
const _len = arr.length;
let result: boolean = true;
for (let i = 0; i < _len; i++) {
if (!callback.call(thisArg || this, arr[i], i, arr)) {
result = false;
}
}
return result;
}
/**
* @function Array.prototype.some
* @description 循环遍历数组每个元素是否存在符合给定条件的元素,有一个符合则返回true,全都不符合返回false
* @param callback callback三个参数:1.当前值。2.当前索引(可选)3.当前数组(可选)
* @param thisArg 可选参数,callback被调用时,this都会指向thisArg参数,不指定时this指向全局对象
*/
Array.prototype.some = function (callback: { call: (arg0: any, arg1: number, arg2: any[]) => any; }, thisArg: any) {
// null | undefined 不能调用方法
if ((!this && typeof this === 'object') || typeof this === 'undefined') {
throw new Error(`Uncaught TypeError: Cannot read properties of ${this}`)
};
if (typeof callback !== 'function') {
throw new Error(`${callback} is not a function`)
}
// 获取数组
const arr = Object(this);
const _len = arr.length;
let result: boolean = false;
for (let i = 0; i < _len; i++) {
if (callback.call(thisArg || this, arr[i], i, arr)) {
result = true;
break;
}
}
return result;
}
// test data
const everyArr = new Array({ name: '张三' }, { name: '李四' }, { name: '王五' });
const everyArrResult1 = everyArr.every((item) => item.name !== '张三')
const everyArrResult2 = everyArr.every((item) => item.name !== '赵四')
console.log(everyArrResult1, 'everyArrResult1');
console.log(everyArrResult2, 'everyArrResult2');
const someArrResult1 = everyArr.some((item) => item.name === '张三')
const someArrResult2 = everyArr.some((item) => item.name === '赵四')
console.log(someArrResult1, 'someArrResult1');
console.log(someArrResult2, 'someArrResult2');
TS实现原生数组方法之遍历:every()、some()
最新推荐文章于 2024-05-06 09:01:42 发布