检索数组内的元素编号

时间:2016-12-13 15:01:06

标签: javascript

我有一个数组,其数据看起来像这样。

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的对象作为第四个对象读取。我该如何编写该代码?

1 个答案:

答案 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;
});

两者都是新的,但两者都可以填充/填充。