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

Javascript 如何通过文本搜索返回JSON数组中项目的索引位置?,javascript,arrays,json,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 }] 使用文本“Earth”是否有一种方法可

这是我的JSON数组:

var planets = [{
  "Name": "Mercury",
  "Temperature": "427°C",
  "Position" : 1
}, {
  "Name": "Venus",
  "Temperature": "462°C",
  "Position" : 2

}, {
  "Name": "Earth",
  "Temperature": "16°C",
  "Position" : 3
}]
使用文本“Earth”是否有一种方法可以返回我的行星数组中项目Earth的索引位置

例如:

planets.find("Earth")
对于常规js:

function getIndexOfPlanet(name){
  for( var i in planets )
    if( planets[i].Name == name )
       return i;

}
使用Lodash实用方法,它非常简单:

var=[{
“名称”:“水星”,
“温度”:“427摄氏度”,
“职位”:1
}, {
“名字”:“维纳斯”,
“温度”:“462摄氏度”,
“职位”:2
}, {
“名称”:“地球”,
“温度”:“16摄氏度”,
“职位”:3
}]
函数getIndexOfPlanet(名称){
返回u.findIndex(行星,{'Name':Name});
}
console.log(getIndexOfPlanet('Earth'))
普通JS:

如果数组中有元素,则findIndex()方法返回数组中的索引 阵列满足提供的测试功能。否则-1为 返回

如果您使用的是IE9+,则可以使用

reduce()方法对累加器和每个累加器应用一个函数 数组的值(从左到右),以将其减少为单个 价值观

[{
“名称”:“水星”,
“温度”:“427摄氏度”,
“职位”:1
}, {
“名字”:“维纳斯”,
“温度”:“462摄氏度”,
“职位”:2
}, {
“名称”:“地球”,
“温度”:“16摄氏度”,
“职位”:3
}].reduce(函数(foundSoFar,x,i){//注意没有箭头函数
if(foundSoFar<0&&x.Name==“接地”){
返回i;
}否则{
回归基金会;
}
}, -1);
或者,使用库的实现,如

您可以使用数组中正在处理的当前元素的
索引:

var行星=[{“名称”:“水星”,“温度”:“427摄氏度”,“位置”:1},{“名称”:“金星”,“温度”:“462摄氏度”,“位置”:2},{“名称”:“地球”,“温度”:“16摄氏度”,“位置”:3}],
地球指数=-1,
地球=行星。查找(功能(项目,索引){
如果(item.Name==='Earth'){
地球指数=指数;
返回true;
}
返回false;
});
console.log('Earth index为:',earthIndex)请尝试以下操作:

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);
var定位指数; forEach(函数(ele,ind){if(ele.Name==“Earth”)locationIndex=ind;}); 控制台日志(位置索引)


find或findIndex可能不支持某些浏览器,如IE..

1。这是一个JavaScript对象(或者更具体地说,是一个数组),而不是JSON数组。JSON=表示JS对象的文本格式。2.您可以使用,但还没有在任何地方都得到很好的支持。如果您不需要索引,只需要实际对象,那么只需直接使用
find
related-related-什么是findIndex?它来自哪里?你能解释一下吗?这是一个很好的答案,但链接文章表明你不会从IE获得任何支持。@AdamWaselnuk现在怎么样?reduce:)的大量使用将比
findIndex
得到更广泛的支持。我想我唯一要做的更改是,如果找不到元素,则返回
-1
,因为这会使它的行为更像
findIndex
函数,但这可能与不同的用例有关,也可能与不同的用例无关。我会假设数据在我的情况下是“行星”吗?
[{
  "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);
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);