答案:js语言:
functionFind(target, array){returnarray.some(arr =>arr.some(e =>e === target))}
解释:
外面的some方法是对每个一维进行遍历,里面的some方法是对每个一维的每一个元素进行遍历,判断是否严格等于要找的target元素,复杂度为n方。
=>是es6语法中的arrow function
例:(x) =>x + 6 相当于
function(x){
return x + 6
}
那么e =>e === target表示返回严格等于target的元素e
some()方法用于检测数组中的元素是否满足指定条件
some() 方法会依次执行数组的每个元素:
如果有一个元素满足条件,则表达式返回 true , 剩余的元素不会再执行检测。
如果没有满足条件的元素,则返回false。
注意: some() 不会对空数组进行检测。
注意: some() 不会改变原始数组。
这里小记一下some以及类似的every,对比一下其他遍历方法
some() 有一个元素满足条件,即返回true
const a = [1, 2, 3]console.log(a.some(v =>v >5)) //falseconsole.log(a.some(v =>v <2)) //true
every() 所有元素满足条件,即返回true
const a = [1, 2, 3]console.log(a.every(v =>v <5)) //trueconsole.log(a.every(v =>v <2)) //false
filter() 返回包含满足条件元素的数组
const a = [1, 2, 3]
console.log(a.filter(v =>v <3)) // [1, 2]
map() 返回一个新数组
const a = [1, 2, 3]
console.log(a.map(v =>v + 5)) // [6, 7, 8]
forEach() 仅循环,无返回值,本质上相当于for
const a = [1, 2, 3]
a.forEach(v =>console.log(v)) // 1 2 3
//实现一个 Array each方法 实现遍历多维数组
var arr = [1,2,3,[4,[5,6]]]//arr.length
Array.prototype.each = function(fn){
try{
//1 目的 遍历数组的每一项 //计数器 记录当前遍历的元素位置
this.i || (this.i=0)
//2 严谨的判断什么时候去走each核心方法
//当数组的长度大于 0 的时候 &&传递的参数 必须为函数
if( this.length>0 &&fn.constructor == Function ){
// 循环遍历数组的每一项
while( this.i <this.length ){
//获取数组的每一个值
var e = this[this.i]//数组的每一项
//如果当前元素获取到了 并且当前元素是一个数组
if(e &&e.constructor == Array ){
//直接递归操作
e.each(fn)
}else{
//如果不是数组 (那就是一个单个元素)
//var obj = true
//fn.apply(obj,[e])
//这的目的就是为了把数组的当前元素 传递给fn函数,并且让函数执行
fn.call(e,e)
}
this.i++
}
this.i == null //释放内存 垃圾回收机制回收变量
}
}catch(err){
//do something
}
return this
}
arr.each(function(item){
console.log(item)
})