Ceci est ma chaîne json.
[{
"name": "placeHolder",
"section": "right"
}, {
"name": "Overview",
"section": "left"
}, {
"name": "ByFunction",
"section": "left"
}, {
"name": "Time",
"section": "left"
}, {
"name": "allFit",
"section": "left"
}, {
"name": "allbMatches",
"section": "left"
}, {
"name": "allOffers",
"section": "left"
}, {
"name": "allInterests",
"section": "left"
}, {
"name": "allResponses",
"section": "left"
}, {
"name": "divChanged",
"section": "right"
}]
Maintenant, j'ai la valeur allInterests
et je veux connaître l'index (il s'agit de '7') de cet objet dans la chaîne ci-dessus. J'ai essayé le code suivant; mais il retourne toujours -1. Quelqu'un peut-il m'aider à découvrir où je me suis trompé?
var q = MY_JSON_STRING
console.log(q.indexOf( 'allInterests' ) );
Merci et salutations, Tismon Varghese
Vous devrez utiliser Array.find
ou Array.filter
ou Array.forEach
.
Puisque votre valeur est un tableau et que vous avez besoin de la position de l'élément, vous devrez itérer dessus.
var data = [{"name":"placeHolder","section":"right"},{"name":"Overview","section":"left"},{"name":"ByFunction","section":"left"},{"name":"Time","section":"left"},{"name":"allFit","section":"left"},{"name":"allbMatches","section":"left"},{"name":"allOffers","section":"left"},{"name":"allInterests","section":"left"},{"name":"allResponses","section":"left"},{"name":"divChanged","section":"right"}];
var index = -1;
var val = "allInterests"
var filteredObj = data.find(function(item, i){
if(item.name === val){
index = i;
return i;
}
});
console.log(index, filteredObj);
var data = [{"name":"placeHolder","section":"right"},{"name":"Overview","section":"left"},{"name":"ByFunction","section":"left"},{"name":"Time","section":"left"},{"name":"allFit","section":"left"},{"name":"allbMatches","section":"left"},{"name":"allOffers","section":"left"},{"name":"allInterests","section":"left"},{"name":"allResponses","section":"left"},{"name":"divChanged","section":"right"}];
var val = "allInterests"
var index = data.findIndex(function(item, i){
return item.name === val
});
console.log(index);
La valeur par défaut Array.indexOf()
fera correspondre searchValue à l'élément actuel et non à ses propriétés. Vous pouvez faire référence à Array.indexOf - polyfill sur MDN
Vous pouvez utiliser Array.findIndex.
var data= [{
"name": "placeHolder",
"section": "right"
}, {
"name": "Overview",
"section": "left"
}, {
"name": "ByFunction",
"section": "left"
}, {
"name": "Time",
"section": "left"
}, {
"name": "allFit",
"section": "left"
}, {
"name": "allbMatches",
"section": "left"
}, {
"name": "allOffers",
"section": "left"
}, {
"name": "allInterests",
"section": "left"
}, {
"name": "allResponses",
"section": "left"
}, {
"name": "divChanged",
"section": "right"
}];
var index = data.findIndex(obj => obj.name=="allInterests");
console.log(index);
J'espère que ça aide :)
Parcourez le tableau et recherchez l'index de l'élément qui contient une clé name
et a la valeur en tant que paramètre transmis.
var data = [{
"name": "placeHolder",
"section": "right"
}, {
"name": "Overview",
"section": "left"
}, {
"name": "ByFunction",
"section": "left"
}, {
"name": "Time",
"section": "left"
}, {
"name": "allFit",
"section": "left"
}, {
"name": "allbMatches",
"section": "left"
}, {
"name": "allOffers",
"section": "left"
}, {
"name": "allInterests",
"section": "left"
}, {
"name": "allResponses",
"section": "left"
}, {
"name": "divChanged",
"section": "right"
}];
Array.prototype.getIndexOf = function(el) {
var arr = this;
for (var i=0; i<arr.length; i++){
console.log(arr[i].name);
if(arr[i].name==el){
return i;
}
}
return -1;
}
alert(data.getIndexOf("allResponses"));