為什么這段函數(shù)運行的不符合預(yù)期?

科技 未結(jié) 2 1036

var a = ["a","b","c"]; var b = ["a","b"];function diff(arr1,arr2){ var newArr = arr1.length>=arr2.length?arr1:arr2.filter(function(ele){if(arr1.length>=arr2.length?arr2:arr1.indexOf(ele)==-1){ return ele } }) return newArr;}

diff(a,b)

結(jié)果是

["a", "b", "c"]

a.filter(function(ele){ if(b.indexOf(ele)==-1){ return ele } })

的結(jié)果是
["c"]

在函數(shù)中

arr1.length>=arr2.length?arr1:arr2

結(jié)果確實是數(shù)組a。

arr1.length>=arr2.length?arr2:arr1

也確實是數(shù)組b

但運行結(jié)果卻是不一樣。這是為什么?

相關(guān)標(biāo)簽:
2條回答
  • 2023-06-10 12:24

    貌似樓主的需求是要對a,b數(shù)組中的不同元素作為函數(shù)執(zhí)行的結(jié)果返回。1、樓上兄弟說的運算符優(yōu)先級問題,但是首先.是不是運算符有待討論,翻了下犀牛書下,沒發(fā)現(xiàn)把.歸在運算符中,而是稱之為調(diào)用表達(dá)式。但從樓主的意圖看,的確如1樓兄弟所說,樓主可能認(rèn)為是先運算了?:操作,再執(zhí)行的filter函數(shù)。2、第一,在這段代碼中,>=的優(yōu)先級要高于?:,所以先運算這部分,根據(jù)它的結(jié)果來決定執(zhí)行賦值,是賦arr1,還是arr2.filter()之后的結(jié)果。第二,filter的寫法有點怪怪的,雖然這么寫也沒有什么問題。filter返回一個新的數(shù)組,不會對原數(shù)組進(jìn)行修改,返回的數(shù)組的元素就是通過了傳入的函數(shù)真值檢測的值。第一段中,如果arr1的長度大了,返回一個數(shù)組,結(jié)果必定是true,如果arr2的長度大了,會檢測arr1中的是否包含傳入的元素,結(jié)果為true,返回了這個元素。繞到這才看的明白,函數(shù)要對arr2過濾,返回和arr1中相同的元素。那么問題來了,第一,從這段代碼中無法保證filter函數(shù)中的返回值符合預(yù)期,因為通過了filter中條件后return回去的ele不能保證一定為true,比如ele是0,undefined,null等。而沒有通過if條件檢測時則隱式的返回了undefined,也就是false。所有感覺怪怪的。

    0 討論(0)
  • 2023-06-10 12:31

    因為.運算符的優(yōu)先級高于:運算符啊,var newArr = arr1.length>=arr2.length?arr1:arr2.filter實際上是var newArr = arr1.length>=arr2.length?arr1:(arr2.filter)你要的是(var newArr = (arr1.length>=arr2.length?arr1:arr2).filter)看懂了嗎?

    0 討論(0)
提交回復(fù)
最新問題
hk1 box無故重啟 1
治女性不孕哪里好 1
什么機(jī)頂盒可以玩和平精英 1
檢查不孕項目費用 1
長虹中學(xué)2022年普高率 1
風(fēng)行電視卡在開機(jī)畫面一直不動了如何辦? 1
去醫(yī)院怎么檢查輸卵管堵 1
2021騏達(dá)音響什么牌子 1
海信crf6a16電視型號 1
有沒有能長期穩(wěn)定除醛的好辦法?海信中央空調(diào)除醛效果理想嗎... 1
猜你喜歡
青島做一個試管嬰兒多少萬費用!附試管詳細(xì)價格!
免疫性不孕做試管嬰兒有用嗎附成功率費用介紹,附試管收費名單!
2024年郴州做三代試管嬰兒的費用是多少?需要注意什么?
一分鐘看完廣州私立試管嬰兒機(jī)構(gòu)大盤點,明細(xì)清單!
鶴壁第三代試管比較好的醫(yī)院有哪些?附詳細(xì)情況
成都做第三代試管嬰兒需多少錢?附試管醫(yī)生信息!
哈薩克斯坦做試管嬰兒成功率有多少,附其價格差異!
上海三代試管嬰兒多少費用?兩者價格比較!
2025泉州醫(yī)院三代試管嬰兒費用明細(xì)?省錢小竅門!
合肥三代試管嬰兒生一對生個小孩價格明細(xì),附私立機(jī)構(gòu)名單!
熱門文章
做試管嬰兒雙胎費用解析
名單來了:試管嬰兒天津排名前十的醫(yī)院一覽
2025年北京單身做試管的中介機(jī)構(gòu)有哪些?
廣西第三代試管嬰兒醫(yī)院排行榜一覽!
2025年天津三代試管嬰兒私立醫(yī)院排名
選擇泰國三代試管嬰兒醫(yī)院的必知要點,這幾家一定不能錯過
泰國三代試管嬰兒收費明細(xì)
2025赴泰國做試管嬰兒的真實感受
泰國私立試管醫(yī)院名單盤點,一分鐘介紹靠譜醫(yī)院
泰國生殖醫(yī)院哪幾家性價比高:哪家醫(yī)院能做試管一清二楚
科普盤點|2025湖北做試管排名前10位的醫(yī)院都是哪些
20個卵泡是嚴(yán)重的多囊嗎?
熱搜!為啥建立人工周期期間無排卵?人工周期會不會排卵?
當(dāng)前熱點|pes奶瓶優(yōu)缺點有哪些?關(guān)于pes奶瓶看看其他姐妹評價
熱點速看|7號染色體異常會怎樣?小心這5種罕見疾病
男方做試管嬰兒的全部流程,只需來院2次
泰國試管費用需要多少?花費是多少?
衡水試管嬰兒費用解析(2025)!附醫(yī)院費用
泰國三代試管嬰兒醫(yī)院有第三代嗎
武漢做三代試管嬰兒大概多少錢?
美國做試管嬰兒價格是多少錢?詳細(xì)費用是什么?
在新疆做試管嬰兒要多少錢?附明細(xì)!!
免疫系統(tǒng)激素水平低在賀州做試管需要住院嗎附費用和流程介紹
去美國做試管的費用標(biāo)準(zhǔn)是什么呢?需要準(zhǔn)備多少錢呢?
廣東較好生殖醫(yī)院最新排名匯總?附收費詳情一覽!
廣告合作方 廣告申請