js判斷一個對象是否在一個對象數(shù)組中(場景分析)
場景:
有一個對象數(shù)組,如:
var arr = [{"appName":"小何","appId":"1"},{"appName":"小王","appId":"2"}]
一般來說,常見的場景有兩個:
第一個是,比如鼠標點擊按鈕,往數(shù)組里push()一個對象,如果數(shù)組中已經存在了,那么就得提示不能添加。
第二個是,push()之后做去重處理,既對象數(shù)組去重。
第一個場景解法:如果數(shù)組中已經存在,就不能添加
使用includes()方法,意為存在,存在返回true,不存在返回false,重點是要結合JSON.stringify()序列化為字符串后再判斷,以下是示例代碼:
var arr = [{"appName":"小何","appId":"1"},{"appName":"小王","appId":"2"}] var obj = {"appName":"小王","appId":"2"} //如果數(shù)組arr中不存在字符串JSON.stringify(obj),那就可以添加,反之,則不添加 if(JSON.stringify(arr).includes(JSON.stringify(obj)) === false){ console.log('不存在') arr.push(obj) }else{ console.log('已存在') }
小結:
es6新增的includes()方法很強大,字符串,數(shù)組,對象均可使用,返回一個布爾值,比之前常用的indexof()語義化更強,且includes()的性能不錯!
第二個場景解法: 對象數(shù)組去重
我理解的對象數(shù)組去重是這樣的:
就是他們的屬性和值都得一樣,且他們的長度也是一樣的。
也就是說,key和value都得一樣才行,而且不能多不能少。
試著手寫了一下,嵌套了好幾層循環(huán),性能不好,直接一步到位,以下是我的最優(yōu)解:
lodash是前端常用的JS方法庫,就是將很多方法封裝起來,方便使用。
使用lodash的
_.uniqWith()方法,結合_.isEqual比較函數(shù),即可較為完美的解決問題。
需要注意的是,_.isEqual()方法也是非常強大的,作用是比較兩個對象是否相等,這個方法非常實用,我經常用它,他是深層遞歸的,推薦。
代碼示例:
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; _.uniqWith(objects, _.isEqual); // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
到此這篇關于js判斷一個對象是否在一個對象數(shù)組中的文章就介紹到這了,更多相關js判斷一個對象在一個對象數(shù)組中內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
深入理解JavaScript系列(1) 編寫高質量JavaScript代碼的基本要點
才華橫溢的Stoyan Stefanov,在他寫的由O’Reilly初版的新書《JavaScript Patterns》(JavaScript模式)中,我想要是為我們的讀者貢獻其摘要,那會是件很美妙的事情2012-01-01微信小程序使用template標簽實現(xiàn)五星評分功能
這篇文章主要為大家詳細介紹了微信小程序使用template標簽實現(xiàn)五星評分功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11JavaScript時間操作之年月日星期級聯(lián)操作
這篇文章主要介紹了JavaScript時間操作之級聯(lián)日期選擇操作,涉及到年、月、日、星期,感興趣的小伙伴們可以參考一下2016-01-01