This is my JSON string.
[{
"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"
}]
Now, I have the value allInterests
and I want to find out the index (this case; it is '7') of this object in the above string. I tried the following code, but it always returns -1.
var q = MY_JSON_STRING
console.log(q.indexOf( 'allInterests' ) );
This question is related to
javascript
json
You will have to use Array.find
or Array.filter
or Array.forEach
.
Since you value is array and you need position of element, you will have to iterate over it.
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);
_x000D_
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);
_x000D_
Default Array.indexOf()
will match searchValue to current element and not its properties. You can refer Array.indexOf - polyfill on MDN
In all previous solutions, you must know the name of the attribute or field. A more generic solution for any attribute is this:
let 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"
}]
function findByKey(key, value) {
return (item, i) => item[key] === value
}
let findParams = findByKey('name', 'allOffers')
let index = data.findIndex(findParams)
Once you have a json object
obj.valueOf(Object.keys(obj).indexOf('String_to_Find'))
You can use 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);
_x000D_
Traverse through the array and find the index of the element which contains a key name
and has the value as the passed param.
var data = [{_x000D_
"name": "placeHolder",_x000D_
"section": "right"_x000D_
}, {_x000D_
"name": "Overview",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "ByFunction",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "Time",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "allFit",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "allbMatches",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "allOffers",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "allInterests",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "allResponses",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "divChanged",_x000D_
"section": "right"_x000D_
}];_x000D_
_x000D_
Array.prototype.getIndexOf = function(el) {_x000D_
_x000D_
var arr = this;_x000D_
_x000D_
for (var i=0; i<arr.length; i++){_x000D_
console.log(arr[i].name);_x000D_
if(arr[i].name==el){_x000D_
return i;_x000D_
}_x000D_
_x000D_
}_x000D_
_x000D_
return -1;_x000D_
_x000D_
}_x000D_
_x000D_
alert(data.getIndexOf("allResponses"));
_x000D_
Function base solution for get index from a JSON object with value by VanillaJS.
Exemple: https://codepen.io/gmkhussain/pen/mgmEEW
var data= [{_x000D_
"name": "placeHolder",_x000D_
"section": "right"_x000D_
}, {_x000D_
"name": "Overview",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "ByFunction",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "Time",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "allFit",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "allbMatches",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "allOffers",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "allInterests",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "allResponses",_x000D_
"section": "left"_x000D_
}, {_x000D_
"name": "divChanged",_x000D_
"section": "right"_x000D_
}];_x000D_
_x000D_
_x000D_
// create function_x000D_
function findIndex(jsonData, findThis){_x000D_
var indexNum = jsonData.findIndex(obj => obj.name==findThis); _x000D_
_x000D_
//Output of result_x000D_
document.querySelector("#output").innerHTML=indexNum;_x000D_
console.log(" Array Index number: " + indexNum + " , value of " + findThis );_x000D_
}_x000D_
_x000D_
_x000D_
/* call function */_x000D_
findIndex(data, "allOffers");
_x000D_
Output of index number : <h1 id="output"></h1>
_x000D_
Source: Stackoverflow.com