0
votes

Obtenez le dernier index d'un élément dans une matrice JSON

J'ai un tableau

var arr = [{name:"Steve",toppedIn:"Biology"},
           {name:"Carol",toppedIn:"Maths"},
           {name:"Steve",toppedIn:"Chemistry"}];


7 commentaires

Vous recherchez l'index ou le dernier objet?


@Henslersoftware, je pense qu'il recherche le dernier index d'élément satisfaisant une condition, mais il n'est pas clair de la question de l'OP.


@Henslersoftware Dernier index


La fonction FINDIDIDEX si utilisé sans argument renvoie une erreur. Qu'est-ce que tu racontes?


@aeshnakashyap s'il vous plaît voir ma réponse ci-dessous.


Je viens de donner le nom de la fonction dans la question N'EST PAS la mise en œuvre .In FindIndrex Case je passe une fonction qui a un élément et l'index et renvoyer l'index lorsque l'élément de tableau correspond à l'élément que je veux @misterjojo


J'espère que vous allez lire ma réponse, il me semble le plus rapide et le plus utile de tous ceux que j'ai vus ici


4 Réponses :


0
votes

dans JS, vous devez utiliser

Array [Array.length - 1]

Pour accéder au dernier élément


2 commentaires

Je ne pense pas que l'OP recherche le dernier élément du tableau mais le dernier élément satisfaisant une condition.


Je sympathise, la question est elle-même une énigme à résoudre avant de comprendre ce qu'elle demande



1
votes

Inverser d'abord le tableau, puis vérifiez si la valeur a été trouvée ou non, puis soustrayez l'index inversé du dernier index de la matrice pour obtenir la réponse correcte.

p>

var arr = [{name:"Steve",toppedIn:"Biology"},{name:"Carol",toppedIn:"Maths"},{name:"Steve",toppedIn:"Chemistry"}];

const lastIndexOfName = name => {
  let index = [...arr].reverse().findIndex(person => person.name == name);
  console.log(index);
  console.log(arr.length);
  return index >= 0 ? arr.length - 1 - index : index;
}

console.log(lastIndexOfName("Steve"));


5 commentaires

Où avez-vous inverser le tableau?


@Sebastianspeitel, hah était sur le point de lui demander la même chose que la réponse a été mise à jour avec moi qui me remarque .. Jack Cela semble presque que vous l'avez fait récemment .. :)


@VitaliyterZiev a fait ce qui a récemment été mis à jour ma réponse?


Vous avez posté votre solution quelques minutes après QEustion de OP, alors je pensais que vous aviez que celui-ci prêt à compter quelque part. :)


Nope - savait juste comment le faire.



0
votes
lastIndex = (arr.length-1) - arr.reverse().findIndex(x=>x.name==="Steve");
arr.reverse();
This one also works but i dont know which one is more performant.

0 commentaires

0
votes

J'ai fait une enveloppe simplifiée pour cette question:

p>

var arr = [ {name:"Steve",toppedIn:"Biology"  }   // 0    Steve
          , {name:"Carol",toppedIn:"Maths"    }   // 1
          , {name:"Carol",toppedIn:"Maths"    }   // 2
          , {name:"Steve",toppedIn:"Chemistry"}   // 3    Steve
          , {name:"Carol",toppedIn:"Maths"    }   // 4
          , {name:"Carol",toppedIn:"Maths"    }   // 5
          , {name:"Steve",toppedIn:"Chemistry"}   // 6  <-- last Steve
          , {name:"Carol",toppedIn:"Maths"    }   // 7
          , {name:"Carol",toppedIn:"Maths"    }   // 8
          ];



Array.prototype.FindLastIndex = function( CallFunction ) {
  var r = -1, t = Object(this);
  for (let i=t.length;i-->0;) {
    if (CallFunction(t[i])) {
      r=i;
      break
    }
  }
  return r
};


console.log ('last Steve is: index= ',  arr.FindLastIndex(a=>a.name=='Steve')  )  // 6


0 commentaires