js如何判斷對象數(shù)組中是否存在某個(gè)對象
js判斷對象數(shù)組中是否存在某個(gè)對象
1. 判斷數(shù)組中是否存在某個(gè)元素
直接用數(shù)組的indexOf方法就好,存在返回當(dāng)前索引不存在返回-1
var arr=[1,2,3,4] arr.indexOf(3) // 2 arr.indexOf(5) // -1
2. 遍歷后判斷對象的屬性是否相同
arr.forEach(item=>{ ? ? if(item.name==='Alex'){ ? ? ? ? alert('存在這個(gè)元素'); ? ? } })
3. 動(dòng)態(tài)添加或刪除對象或元素的
用這個(gè)方法的話不好操作,可能會(huì)添加或刪除掉多個(gè),可以是用string的indexOf方法來判斷
const option = {name:'111'} // 如果數(shù)組里面本身不存在這個(gè)對象則把這個(gè)加進(jìn)去 if(JSON.stringify(arr).indexOf(JSON.stringify(option))===-1){ ? ? ? ? ? ?arr.push(option); // 進(jìn)行動(dòng)態(tài)的操作 }
這個(gè)判斷是可以,但存在一個(gè)問題需要注意一下,如果對象的順序不一樣,是不能檢測到重復(fù)的
例如arr = [{name:'張三', sex:'男'}]
option = {sex:'男', name:'張三'}
利用上述方法檢測的話,實(shí)際上該數(shù)組是存在這個(gè)數(shù)組對象的,但如果用string的indexOf方法是不能檢測對的,用這個(gè)方法的時(shí)候這個(gè)點(diǎn)需要注意
4. 設(shè)一個(gè)flag來做判斷的標(biāo)識(shí)
let flag = true; let msg = ''; let arr = [] ? if(arr.length<6){ ? ? arr.forEach(item=>{ ? ? ? ? if(data.id===item.id){ // 對象里的唯一標(biāo)識(shí)id ? ? ? ? ? ? msg = '請勿重復(fù)添加!' ? ? ? ? ? ? flag = false; ? ? ? ? } ? ? }) }else{ ? ? msg = '最多添加6個(gè)!' ? ? flag = false; } ? if(flag){ // 如果滿足條件-數(shù)組長度小于6,當(dāng)前添加的值在數(shù)組里不存在,就把值添加進(jìn)去 ? ? arr.push(data) }else{ // 否則彈出提示信息 ? ? alert(msg) }
5. 利用數(shù)組API some來判斷
var result = arr.some(item=>{ ? ?if(item.name==='張三'){ ? ? ? return true? ? }? }) // if 可以省略 var result = arr.some(item=>item.name==='張三') console.log(result) // 如果arr數(shù)組對象中含有name:'張三',就會(huì)返回true,否則返回false if(result){ // 如果存在 ? // do something ?}
js對象數(shù)組根據(jù)某一屬性查找對象
js對象數(shù)組[{name: "zhangsan", age: 20}, {name: "lisi", age: 30}], 如果想查找name是zhangsan的這個(gè)對象,傳統(tǒng)方法可以根據(jù)for+if條件遍歷,也可以用map重新構(gòu)造,或者組裝新對象。
1. 組裝新對象
?list.forEach(function (item) { ? ?selectObj[item.name] = item ?})
selectObj新對象結(jié)構(gòu)為:{"zhangsan": {name: "zhangsan", age: 20}, "lisi": {name: "lisi", age: 30}}, 通過selectObj[zhangsan]即可獲取。
2. 或者使用es6中的新特性
list.find(item => item.name == "zhangsan")
其他的比如filter, some, every方法也都很好用。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
js實(shí)現(xiàn)公告自動(dòng)滾動(dòng)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)公告自動(dòng)滾動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05js實(shí)現(xiàn)編輯div節(jié)點(diǎn)名稱的方法
這篇文章主要介紹了js實(shí)現(xiàn)編輯div節(jié)點(diǎn)名稱的方法,可實(shí)現(xiàn)針對div節(jié)點(diǎn)名稱的編輯及樣式的選擇效果,并且分別針對IE與FF瀏覽器的樣式進(jìn)行了選擇與控制,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12JavaScript日期和時(shí)間的格式化及其它常用處理方法
這篇文章主要給大家介紹了關(guān)于JavaScript日期和時(shí)間的格式化及其它常用處理方法,JavaScript中可以使用Date對象來表示日期和時(shí)間,如果需要格式化日期和時(shí)間,可以使用Date對象的幾個(gè)方法和一些字符串操作方法來實(shí)現(xiàn),需要的朋友可以參考下2023-09-09純javascript移動(dòng)優(yōu)先的幻燈片效果
這篇文章主要介紹了純javascript實(shí)現(xiàn)移動(dòng)優(yōu)先的幻燈片效果,感興趣的小伙伴們可以參考一下2015-11-1115個(gè)非常實(shí)用的JavaScript代碼片段
這篇文章主要為大家詳細(xì)介紹了15個(gè)非常實(shí)用的JavaScript代碼片段,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12JS構(gòu)造一個(gè)html文本內(nèi)容成文件流形式發(fā)送到后臺(tái)
本文通過實(shí)例代碼給大家介紹了JS構(gòu)造一個(gè)html文本內(nèi)容成文件流形式發(fā)送到后臺(tái)的相關(guān)資料,需要的朋友可以參考下2018-07-07