js如何判斷對(duì)象數(shù)組中是否存在某個(gè)對(duì)象
js判斷對(duì)象數(shù)組中是否存在某個(gè)對(duì)象
1. 判斷數(shù)組中是否存在某個(gè)元素
直接用數(shù)組的indexOf方法就好,存在返回當(dāng)前索引不存在返回-1
var arr=[1,2,3,4] arr.indexOf(3) // 2 arr.indexOf(5) // -1
2. 遍歷后判斷對(duì)象的屬性是否相同
arr.forEach(item=>{
? ? if(item.name==='Alex'){
? ? ? ? alert('存在這個(gè)元素');
? ? }
})3. 動(dòng)態(tài)添加或刪除對(duì)象或元素的
用這個(gè)方法的話(huà)不好操作,可能會(huì)添加或刪除掉多個(gè),可以是用string的indexOf方法來(lái)判斷
const option = {name:'111'}
// 如果數(shù)組里面本身不存在這個(gè)對(duì)象則把這個(gè)加進(jìn)去
if(JSON.stringify(arr).indexOf(JSON.stringify(option))===-1){
? ? ? ? ? ?arr.push(option); // 進(jìn)行動(dòng)態(tài)的操作
}這個(gè)判斷是可以,但存在一個(gè)問(wèn)題需要注意一下,如果對(duì)象的順序不一樣,是不能檢測(cè)到重復(fù)的
例如arr = [{name:'張三', sex:'男'}]
option = {sex:'男', name:'張三'}
利用上述方法檢測(cè)的話(huà),實(shí)際上該數(shù)組是存在這個(gè)數(shù)組對(duì)象的,但如果用string的indexOf方法是不能檢測(cè)對(duì)的,用這個(gè)方法的時(shí)候這個(gè)點(diǎn)需要注意
4. 設(shè)一個(gè)flag來(lái)做判斷的標(biāo)識(shí)
let flag = true;
let msg = '';
let arr = []
?
if(arr.length<6){
? ? arr.forEach(item=>{
? ? ? ? if(data.id===item.id){ // 對(duì)象里的唯一標(biāo)識(shí)id
? ? ? ? ? ? msg = '請(qǐng)勿重復(fù)添加!'
? ? ? ? ? ? flag = false;
? ? ? ? }
? ? })
}else{
? ? msg = '最多添加6個(gè)!'
? ? flag = false;
}
?
if(flag){ // 如果滿(mǎn)足條件-數(shù)組長(zhǎng)度小于6,當(dāng)前添加的值在數(shù)組里不存在,就把值添加進(jìn)去
? ? arr.push(data)
}else{ // 否則彈出提示信息
? ? alert(msg)
}5. 利用數(shù)組API some來(lái)判斷
var result = arr.some(item=>{
? ?if(item.name==='張三'){
? ? ? return true?
? }?
})
// if 可以省略
var result = arr.some(item=>item.name==='張三')
console.log(result) // 如果arr數(shù)組對(duì)象中含有name:'張三',就會(huì)返回true,否則返回false
if(result){ // 如果存在
? // do something
?}js對(duì)象數(shù)組根據(jù)某一屬性查找對(duì)象
js對(duì)象數(shù)組[{name: "zhangsan", age: 20}, {name: "lisi", age: 30}], 如果想查找name是zhangsan的這個(gè)對(duì)象,傳統(tǒng)方法可以根據(jù)for+if條件遍歷,也可以用map重新構(gòu)造,或者組裝新對(duì)象。
1. 組裝新對(duì)象
?list.forEach(function (item) {
? ?selectObj[item.name] = item
?})selectObj新對(duì)象結(jié)構(gòu)為:{"zhangsan": {name: "zhangsan", age: 20}, "lisi": {name: "lisi", age: 30}}, 通過(guò)selectObj[zhangsan]即可獲取。
2. 或者使用es6中的新特性
list.find(item => item.name == "zhangsan")
其他的比如filter, some, every方法也都很好用。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于JavaScript中事件綁定的方法總結(jié)
下面小編就為大家?guī)?lái)一篇JavaScript中事件綁定的方法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10
JavaScript偏函數(shù)與柯里化實(shí)例詳解
這篇文章主要介紹了JavaScript偏函數(shù)與柯里化,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript偏函數(shù)與柯里化的概念、原理、定義、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-03-03
javascript判斷ie瀏覽器6/7版本加載不同樣式表的實(shí)現(xiàn)代碼
ie6/ie7的兼容問(wèn)題很讓人苦惱,我們可以針對(duì)這兩個(gè)版本的瀏覽器單獨(dú)寫(xiě)?yīng)毩⒌臉邮奖?,?lái)解決兼容問(wèn)題。這里的例子以判斷ie6與ie7來(lái)加載不同的樣式表2011-12-12
bootstrap——bootstrapTable實(shí)現(xiàn)隱藏列的示例
本篇文章主要介紹了bootstrapTable實(shí)現(xiàn)隱藏列的示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01
javascript顯示用戶(hù)停留時(shí)間的簡(jiǎn)單實(shí)例
這篇文章介紹了javascript顯示用戶(hù)停留時(shí)間的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-08-08
JavaScript實(shí)現(xiàn)大文件上傳的示例代碼
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)大文件上傳功能的示例代碼,文中的代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JavaScript有一定幫助,感興趣可以跟隨小編一起學(xué)習(xí)一下2022-11-11
JS使用Promise時(shí)常見(jiàn)的5個(gè)錯(cuò)誤總結(jié)
Promise?提供了一種優(yōu)雅的方法來(lái)處理?JS?中的異步操作。這也是避免“回調(diào)地獄”的解決方案。然而,并沒(méi)有多少開(kāi)發(fā)人員了解其中的內(nèi)容。因此,許多人在實(shí)踐中往往會(huì)犯錯(cuò)誤。在本文中,介紹一下使用?promise?時(shí)的五個(gè)常見(jiàn)錯(cuò)誤,希望大家能夠避免2022-11-11
點(diǎn)擊標(biāo)簽切換和自動(dòng)切換DIV選項(xiàng)卡
點(diǎn)擊標(biāo)簽切換DIV的效果,在很多地方都有見(jiàn)到過(guò),而且實(shí)現(xiàn)的方法有很多,本例介紹的這個(gè)可以切換和自動(dòng)切換DIV選項(xiàng)卡2014-08-08

