什么应该在JS中更高效

时间:2018-03-16 09:43:20

标签: javascript arrays node.js performance

我想知道什么会更高效。隐含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);

对此有何启示?

2 个答案:

答案 0 :(得分:1)

您可以使用Array.prototype.findIndex

entries.findIndex(item => item.filterId === filterId)

答案 1 :(得分:0)

您可以使用广泛可用的阵列功能来制作它,并且仍然具有O(n)的复杂性。

例如,您可以使用array.someconst 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