Javascript 如何通过文本搜索返回JSON数组中项目的索引位置?
这是我的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”是否有一种方法可
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);