这是我的JSON数组:
var planets = [{
"Name": "Mercury",
"Temperature": "427°C",
"Position" : 1
}, {
"Name": "Venus",
"Temperature": "462°C",
"Position" : 2
}, {
"Name": "Earth",
"Temperature": "16°C",
"Position" : 3
}]
使用文字"地球"有没有一种方法可以返回我的Planets数组中Earth项的索引位置?
例如:
planets.find("Earth")
答案 0 :(得分:2)
普通JS:findIndex
findIndex()方法返回数组中的索引(如果是元素) 数组满足提供的测试功能。否则-1是 返回。
[{
"Name": "Mercury",
"Temperature": "427°C",
"Position" : 1
}, {
"Name": "Venus",
"Temperature": "462°C",
"Position" : 2
}, {
"Name": "Earth",
"Temperature": "16°C",
"Position" : 3
}].findIndex(x => x.Name === "Earth")
如果您使用的是IE 9+,则可以使用reduce function
reduce()方法对累加器和每个都应用一个函数 数组的值(从左到右)将其减少为单个 值。
[{
"Name": "Mercury",
"Temperature": "427°C",
"Position" : 1
}, {
"Name": "Venus",
"Temperature": "462°C",
"Position" : 2
}, {
"Name": "Earth",
"Temperature": "16°C",
"Position" : 3
}].reduce(function (foundSoFar, x, i) { // Note no arrow funcion
if (foundSoFar < 0 && x.Name === "Earth") {
return i;
} else {
return foundSoFar;
}
}, -1);
或者,使用像ramda
这样的库的实现答案 1 :(得分:1)
使用常规js:
function getIndexOfPlanet(name){
for( var i in planets )
if( planets[i].Name == name )
return i;
}
使用Lodash实用程序方法findIndex,它就像:
一样简单
var planets = [{
"Name" : "Mercury",
"Temperature" : "427°C",
"Position" : 1
}, {
"Name" : "Venus",
"Temperature" : "462°C",
"Position" : 2
}, {
"Name" : "Earth",
"Temperature" : "16°C",
"Position" : 3
}]
function getIndexOfPlanet(name){
return _.findIndex(planets, { 'Name':name});
}
console.log( getIndexOfPlanet('Earth') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
答案 2 :(得分:1)
您可以使用数组中正在处理的当前元素的Array#find index
:
var planets = [{"Name": "Mercury","Temperature": "427°C","Position": 1}, {"Name": "Venus","Temperature": "462°C","Position": 2}, {"Name": "Earth","Temperature": "16°C","Position": 3}],
earthIndex = -1,
earth = planets.find(function(item, index) {
if (item.Name === 'Earth') {
earthIndex = index;
return true;
}
return false;
});
console.log('Earth index is:', earthIndex);
答案 3 :(得分:1)
试试这个:
var index = -1;
var val = 'Earth';
var filteredObj = planets.find(function(item, i){
if(item.Name === val){
index = i;
return i;
}
});
console.log(index, filteredObj);
答案 4 :(得分:1)
var locationIndex; planets.forEach(function(ele,ind){if(ele.Name ===&#34; Earth&#34;)locationIndex = ind;}); 的console.log(locationIndex);
find或findIndex可能不支持某些浏览器,如IE ..