我想知道什么会更高效。隐含2次迭代或简单for
循环的语言的本机函数。
我们的想法是找到属性filterId与具体值匹配的对象数组的索引。
for
的解决方案是运行时为n
for (i = 0; i < entries.length; i++) {
if (entries[i].filterId === filterId) {
return i;
}
}
或其他解决方案,内部必须使用2个循环,一个用于map
,另一个用于indexOf
。但是,这些是由JS引擎内部优化的JS函数。运行时2n。
entries.map(item=>item.filterId).indexOf(filterId);
对此有何启示?
答案 0 :(得分:1)
您可以使用Array.prototype.findIndex。
entries.findIndex(item => item.filterId === filterId)
答案 1 :(得分:0)
您可以使用广泛可用的阵列功能来制作它,并且仍然具有O(n)的复杂性。
例如,您可以使用array.some
。
const data = [{id:1},{id:2},{id:3},{id:4}]
let foundIndex = null;
data.some((value, index) => {
if(value.id === 3) {
foundIndex = index;
return true;
}
return false;
});
console.log(foundIndex);
的优势:几乎所有浏览器都可以使用它(IE浏览器自IE9开始提供)。
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some了解文档
let rec print_file_contents cont_list = match cont_list with
| [] -> ()
| m::ms ->
try parse_and_print m
with Failure _ -> print_string m