如何通过搜索文本返回JSON数组中项目的索引位置?

时间:2016-09-13 12:36:01

标签: javascript arrays json

这是我的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")

5 个答案:

答案 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 ..