forEach和map循环的区别:forEach没有返回值,即使给出return也不管用,map会返回一个新数组给你,原数组不会发生改变。
forEach:Array.prototype.forEach1 = function (callback) {
for (let i = 0; i < this.length; i++) {
callback(this[i], i)
}
}
map:Array.prototype.map1 = function (callback) {
let res = []
for (let i = 0; i < this.length; i++) {
let obj = callback(this[i], i)
res.push(obj)
}
return res
}
find和some很类似,都是寻找符合条件的,有一个就可以了,而且不会对空数组进行检测,也不会改变原始数组。;区别在于some进去搜罗一圈回来如果有符合条件的就返回true,而find是将符合条件的那条数据返回出来(返回第一个符合条件的对象),并且将数组中的每个元素都调用一次执行函数。
find:Array.prototype.find1 = function (callback) {
for (let i = 0; i < this.length; i++) {
let isTrue = callback(this[i], i)
if (isTrue) return this[i]
}
}
some:Array.prototype.some1 = function (callback) {
for (let i = 0; i < this.length; i++) {
let isTrue = callback(this[i], i)
if (isTrue) return true
}
return false
}
filter:返回一个新的数组,不会改变原始数组。
Array.prototype.filter1 = function (callback) {
let res = []
for (let i = 0; i < this.length; i++) {
let isTrue = callback(this[i], i)
if (isTrue)
res.push(this[i])
}
return res
}
every:用于检测数组中的所有元素是否符合指定条件,如果有一个元素没有符合条件,则整个表达式返回的都是false,,所有元素满足时才返回true,不会对空数组进行检测,也不会改变原始数组。
Array.prototype.every1 = function (callback) {
for (let i = 0; i < this.length; i++) {
let isTrue = callback(this[i], i)
if (!isTrue) return false
}
return true