@各位觀眾月弛,好久不見,不知有木有想人家翱剖ⅰC毖谩(哇哇哇,233333)這段時(shí)間一直想寫簡書來著贞绵,但不知要寫些啥東西厉萝!終于憋出一個(gè)大招,雖然被虐的體無完膚榨崩,但還是想分享一下這個(gè)小知識(shí)點(diǎn)谴垫!嘎嘎!
接招
寫一個(gè)方法母蛛,要求:給予兩個(gè)數(shù)組a1和a2翩剪,然后返回一個(gè)已經(jīng)排序的數(shù)組 r,其中數(shù)組 r 中的值是a1中的項(xiàng)并且能夠在a2中找到這些字母的片段2式肌(畢竟英語太次前弯,翻譯的太爛,各位看官多多包涵哈秫逝!==)
各位可以先思考恕出,自己想想該怎么做!然后往下看NシU阄住!
刷后。
的畴。
。
尝胆。
苗傅。
。
我的想法是:利用兩個(gè)循環(huán)班巩,然后判斷a1是否存在于a2之中渣慕,并且判斷取出來的a1是否包含于arr之中,最后返回排序好的arr!
代碼如下:
function inArray(array1,array2){
var arr = [];
for(var i in array1){
for(var j in array2){
if (array2[j].indexOf(array1[i])>-1 && arr.indexOf(array1[i]) == -1) {
arr.push(array1[i]);
}
}
}
return arr.sort();
}
這里面用到了各種循環(huán)和判斷抱慌,感覺有那么一點(diǎn)麻煩逊桦!這也是一般人都能夠想到的!于是就看了大神到底是怎么想的抑进?
大神代碼來了G烤!寺渗!
function inArray(array1,array2){
return array1.filter(function(str1){
return array2.some(function(str2){
return str2.indexOf(str1)>-1;
})
}).sort();
果然大神就是大神匿情!利用了三個(gè)return和JS中已有的兩個(gè)迭代方法filter和some兰迫,就輕松搞定!(厲害了我的哥>娉啤)
摘自《JavaScript高級程序設(shè)計(jì)》
ECMAScript5 為數(shù)組定義了5個(gè)迭代方法汁果。每個(gè)方法都接收兩個(gè)參數(shù):要在每一項(xiàng)上運(yùn)行的函數(shù)和(可選的)運(yùn)行該函數(shù)的作用域?qū)ο?-- 影響 this 的值。以下是這5個(gè)迭代方法的作用:
every():對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)玲躯,如果每一項(xiàng)都返回true据德,則返回true。
filter():對數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù)跷车,返回該函數(shù)會(huì)返回 true 的項(xiàng)組成的數(shù)組棘利。
forEach():對數(shù)組中每一項(xiàng)給定函數(shù),這個(gè)方法沒有返回值朽缴。
map():對數(shù)組中的每一項(xiàng)給定函數(shù)善玫,返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。
some():對數(shù)組中的每一項(xiàng)運(yùn)行給定的函數(shù)密强,如果該函數(shù)對任一項(xiàng)返回 true茅郎,則返回true。
以上方法都不會(huì)修改數(shù)組中的包含的值誓斥。
結(jié)合以上文檔來看,就不難理解大神寫的代碼了许帐。
array1利用filter方法劳坑,array利用some方法,判斷str2是否存在于str1中成畦,只要**str1存在于str2中距芬,some方法就會(huì)返回true,存放于filter中的數(shù)組里面循帐。最后利用sort方法進(jìn)行排序框仔!得出結(jié)果。