How do I get the index of object in array using angular?

56,409

Solution 1

As mdn says:

The findIndex() method returns the index of the first element in the array that satisfies the provided testing function. Otherwise, it returns -1, indicating that no element passed the test.

If you have array of objects like this, then try to use findIndex:

const a = [
    { firstName: "Adam", LastName: "Howard" },
    { firstName: "Ben", LastName: "Skeet" },
    { firstName: "Joseph", LastName: "Skeet" }
];

let index = a.findIndex(x => x.LastName === "Skeet");
console.log(index);

Solution 2

Adding to the answer of @StepUp (and please select his answer as best, as it replies the question greatly):

Finding the index is not related to Angular, it is rather Vanilla JavaScript.

In your case, you need a function that has as parameter the newDatum "needle" to be searched in the array "haystack" using findIndex:

var getNewDatumIndex = (array, newDatumNeedle) => {
  return array.findIndex(x => x.newDatum === newDatumNeedle); 
}

You can also add the method in the array prototype if you want, in order to ommit the first argument:

Array.prototype.getNewDatumIndex = (newDatumNeedle) => {
  return this.findIndex(x => x.newDatum === newDatumNeedle); 
}

Solution 3

An easy and elegant solution is to use _.isEqual, which performs a deep comparison using lodash library

Npm Package -- https://www.npmjs.com/package/lodash

const a = [
   { firstName: "Adam", LastName: "Howard" },
   { firstName: "Ben", LastName: "Skeet" },
   { firstName: "Joseph", LastName: "Skeet" }
];
const find =  { firstName: "Joseph", LastName: "Skeet" }

index = a.findIndex(x => _.isEqual(x, find));

console.log(index);
Share:
56,409

Related videos on Youtube

stan
Author by

stan

Updated on March 10, 2022

Comments

  • stan
    stan about 2 years

    I need to have the index of an object in array so I can delete this part of the array. I tried using this:

    var index = this.urenRegistratie.indexOf(newDatum);
    

    But it keeps returning -1 and I don't know why this is happening.

    this is the part of the code I have. it gets data out of a form in html and places that into my array, now I already have an if statement ready ( exisitingDatum ) , my code needs to be in there. Can someone please help me out a bit?

     store(newValue:number, newDatum, newAanwezig, newComment){
        const existingDatum = this.urenRegistratie.find(billable => {
          return billable.datum === newDatum;
          return
        });
    
        if (!existingDatum) {
            let billable = new BillableHours();
            billable.datum = newDatum;
            billable.hours = +newValue;
            billable.aanwezig = newAanwezig;
            billable.comment = newComment;
    
            if(billable.aanwezig == "Aanwezig" && billable.hours !== 0 && billable.datum !== null) {
              this.urenRegistratie.push(billable);
            }
        }
    
        if(existingDatum) {
    
        }
    
      }
    
  • Admin
    Admin about 2 years
    Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.