如何获取匹配条件的对象的索引(不沿数组迭代)?
你不能,某些东西必须遍历数组(至少一次)。
如果条件变化很大,那么你必须循环查看其中的对象,看看它们是否符合条件。但是,在具有 ES5 功能的系统(或者如果安装填充程序)上,可以相当简洁地完成该迭代:
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
它使用 new(ish) Array#some
函数,该函数循环遍历数组中的条目,直到您为其提供的函数返回 true。我给它的函数保存匹配条目的索引,然后返回以停止迭代。true
或者,当然,只使用一个循环。您的各种迭代选项将在另一个答案中介绍。for
但是,如果您始终要对此查找使用相同的属性,并且属性值是唯一的,则可以只循环一次并创建一个对象来映射它们:
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
(或者,同样,您可以使用循环或任何其他选项。for
然后,如果您需要使用 找到条目,则可以执行以下操作:prop2 = "yutu"
var entry = prop2map["yutu"];
我称之为“交叉索引”数组。当然,如果删除或添加条目(或更改其值),则还需要更新映射对象。prop2