第一种情况 对象键值对顺序不变

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('已存在')
}

总结

  1. 很多情况下,我们在判断一个数组中是否存在某个是,我们用indexOf就行。包括在判断有序的对象数组中是否存在某个对象。
  2. 一旦参考对象的顺序打乱,我们就得使用 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);
}