第一种情况 对象键值对顺序不变
var arr=[{"appId":"1","appName":"小君"},
{"appId":"2","appName":"小花"}
]
var obj={"appId":"2","appName":"小花"}
使用 JSON.stringify(arr).indexOf(JSON.stringify(obj)) === -1 判断
if(JSON.stringify(arr).indexOf(JSON.stringify(obj)) === -1){
console.log('不存在')
arr.push(obj)
}else{
console.log('已存在')
}
以上情况能正常运行
一旦出现以下情况,判断就不可控
var obj={"appName":"小花","appId":"2"}
第二种情况 对象键值对顺序改变
var arr=[{"appId":"1","appName":"小君"},
{"appId":"2","appName":"小花"}
]
var obj={"appName":"小花","appId":"2"}
if(JSON.stringify(arr).includes(JSON.stringify(obj)) === -1){
console.log('不存在')
arr.push(obj)
}else{
console.log('已存在')
}
总结
- 很多情况下,我们在判断一个数组中是否存在某个是,我们用indexOf就行。包括在判断有序的对象数组中是否存在某个对象。
- 一旦参考对象的顺序打乱,我们就得使用 includes
项目中使用
let origin = JSON.stringify(needDeleateData).indexOf(JSON.stringify(oObject));
if (!bSelected && origin == -1) {
needDeleateData.push(oObject);
} else {
let indexOf = needDeleateData.indexOf(oItem);
needDeleateData.splice(indexOf, 1);
}