我有一个数组,其数据看起来像这样。
var objects = [
{
"rowid": 1,
"Hostname": "11 Com"
},
{
"rowid": 2,
"Hostname": "11 UMi"
},
{
"rowid": 3,
"Hostname": "14 And"
},
{
"rowid": 5,
"Hostname": "23 A"
}];
我试图获取每个对象的元素编号的位置。每个对象都包含自己的"行ID"这基本上是我目前使用这个函数检索元素位置的方法:
function findCorrespondingNumber(hostname) {
function search(am, im) {
if (am.Hostname === hostname) {
index = im; return true; }
} var index;
if (objects.some(search)) {
return objects[index]['rowid'];
}
}
var correspNumb = findCorrespondingNumber(name) - 1;
var fiff = objects[correspNumb]["Hostname"];
数据集的问题是数字有时可以跳过序列。 rowid 3后跟5,而不是4。这导致了进一步的代码问题所以我需要它,以便将rowid 5的对象作为第四个对象读取。我该如何编写该代码?
答案 0 :(得分:2)
我认为你正在寻找Array#findIndex
,这是在ES2015中添加的。它接受谓词函数并返回谓词返回真值的第一个条目的索引(如果它从未执行过,则返回-1):
var index = objects.findIndex(function(entry) {
return entry.Hostname == hostname;
});
它为您提供 0-based 索引(因此,在您的示例中为0 - 3)。如果你想要 1-based 索引(例如1到4;你确实说“为第三个条目返回3
”),请在结果中添加一个。
还有密切相关的Array#find
,它做同样的事情,但返回实际的条目:
var entry = objects.find(function(entry) {
return entry.Hostname == hostname;
});
两者都是新的,但两者都可以填充/填充。