判断对象数组是否包含某个对象
let arr = [{name:'a'},{name:'b'}];let json1 =
·
文章目录
判断对象数组是否包含某个对象
let a = {num:1},
b = {num:1},
c = a;
console.log(a == b) => false
console.log(b == c) => false
console.log(a == c) => true
给不同变量a,b赋值 键值对一样的{num:1},a,b变量不相等,他们的指针不一样;
c = a, c 赋值了 a ,这时 c 与 a 的指针相等,所以打印 a == c 时,结果是true;
判断数组是否包含某个对象的方法
let arr = [
{num:1},
{num:2},
{num:3}
],
jsonA = {num:1}, // {num:1}
jsonB = arr[0], // {num:1}
jsonC = {num:5}; // {num:5}
console.log(arr.includes(jsonA)) => false
console.log(arr.includes(jsonB)) => true
console.log(arr.includes(jsonC)) => false
jsonB 是 arr 的第 0 下标的值,和 arr 有赋值关系,所以 arr.includes(jsonB)的结果是 true;
jsonA 直接赋值 {num:1} , 是一个新的对象, 和 arr 没有赋值关系,所以 arr.includes(jsonA) 的结果是 false。
一、JSON.stringify
+ indexOf
-
解决方法A:把 arr 和 jsonA 变成字符串,通过
indexOf
判断下标是否 -1JSON.stringify(arr).indexOf(JSON.stringify(jsonA)) console.log(JSON.stringify(arr).indexOf(JSON.stringify(jsonA))) // 打印 1 ,包含 console.log(JSON.stringify(arr).indexOf(JSON.stringify(jsonC))) // 打印 -1 ,不包含
二、存在赋值关系,includes
或indexOf
-
解决方法B:如果 数组 和 对象 存在赋值关系,直接使用
includes
或indexOf
判断:arr.includes(jsonB); // true 包含 arr.indexOf(jsonB); // 0 包含 let jsonD = arr[6]; // undefined arr.includes(jsonD) // false arr的下标一共只有 0, 1, 2, 没有6,所以不包含,jsonD是undefined,不存在于 arr 里。 arr.indexOf(jsonD) // -1
三、通过对象的唯一键值对(比如id)
去判断
-
解决方法C:封装方法,通过查找数组arr中,是否存在 该对象 jsonA 中的唯一value值的某个键值对判断:
function findItem(arr,key,val) { for(let i = 0; i < arr.length; i++) { if(arr[i][key] == val) { return i } } return -1 }
- 使用方法
let dataArr = [ { num:"0", id: "8aaee7f3715e1962017161a9272d1b07", sortNum: null, isDisable: "N", createTime: "2020-04-10 09:16:47", createBy: "13033333333.小型", userName:"大东" }, { num:"1", id: "8aaee7f3713a3b1001713f76e2c73173", sortNum: null, isDisable: "N", createTime: "2020-04-03 17:54:48", createBy: "13733333333.13733333333", userName:"大喜" }, { num:"2", id: "8aaee7f3713a3b1001713f76e2c33621", sortNum: null, isDisable: "N", createTime: "2020-04-03 18:00:00", createBy: "13733333344.13733333344", userName:"大东" }, ]; let item = { num:"2", id: "8aaee7f3713a3b1001713f76e2c33621", sortNum: null, isDisable: "N", createTime: "2020-04-03 18:00:00", createBy: "13733333344.13733333344", userName:"大东" } let index = findItem(dataArr,'id',item.id); console.log(index) // 2
-
解决方法D:修改 C 的方法,可查找整个对象:
function findObj(arr,obj) { for(let i = 0; i < arr.length; i++) { if(JSON.stringify(arr[i]) == JSON.stringify(obj)) { return i } } return -1 }
使用方法:
let idx = findObj(dataArr,item); console.log(idx) // 2
JSON.stringify()的开销较大,数据量大的话避免使用,性能不佳
如果 Array 或 Object 里面含有 Function, 不能使用JSON.stringify 将其转化为字符串
更多推荐
已为社区贡献1条内容
所有评论(0)