0

I have an array

let arr = []

I am inserting an object into it

let a = {name:"a", age: 20}
arr.push(a);

I am checking index with below with same object assigned to different variable

let b = {name:"a", age:20}

I tried

arr.indexOf(b);

I am getting -1 I expect 0.

Please guide me

androidGenX
  • 1,108
  • 3
  • 18
  • 44

4 Answers4

2

JS does object comparison (and search) by reference, not by value. Hence: for foo == bar to be true, foo and bar must be the same object, not just an object with the same properties and values:

console.log({name:"a", age:20} == {name:"a", age:20});

Hence instead of indexOf, you need something like findIndex.

let arr = [];
let a = {name:"a", age: 20};
arr.push(a);
let b = {name:"a", age:20}

const index = arr.findIndex(item => item.name === b.name && item.age === b.age);
console.log(index);
mbojko
  • 13,503
  • 1
  • 16
  • 26
1

This is because, objects are reference type, the variable a and b points to two different memory locations. Thus a != b

let a = {name:"a", age: 20};
let b = {name:"a", age:20}
console.log(a == b);
Mamun
  • 66,969
  • 9
  • 47
  • 59
0

JavaScript can not compare objects by default. Use Array.findIndex instead:

let arr = []

let a = {name:"a", age: 20}

arr.push(a);
let b = {name:"a", age:20}


console.log(arr.findIndex(elem => elem.name == b.name && elem.age == b.age));
BlackBeard
  • 10,246
  • 7
  • 52
  • 62
0

Yes because Js compare by using reference not by value

let arr = [];

let a = {
  name: "a",
  age: 20
};
arr.push(a);

let b = {
  name: "a",
  age: 20
};

console.log(arr.indexOf(b));

let arr = [];

let a = {
  name: "a",
  age: 20
};
arr.push(a);

let b = a

console.log(arr.indexOf(b));
Syed Mehtab Hassan
  • 1,297
  • 1
  • 9
  • 23