避免javascript中的循环以优化代码

避免javascript中的循环以优化代码,javascript,Javascript,我有两个数组 对象数组 [ {id:1,name:”temp1”}, {id:2,name:”temp2”}, {id:3,name:”temp3”}, {id:4,name:”temp4”} ] 阵列 [3,4] 我需要一个输出 [ {id:3,name:”temp3”}, {id:4,name:”temp4”} ] 不使用循环。 javascript有这样的函数来优化代码吗?如果您想优化可读性,您可以使用如下方法: const a1=[{id:1,名称:'

我有两个数组

  • 对象数组

    [ {id:1,name:”temp1”}, 
      {id:2,name:”temp2”}, 
      {id:3,name:”temp3”}, 
      {id:4,name:”temp4”}
    ]
    
  • 阵列

    [3,4]
    
  • 我需要一个输出

    [ {id:3,name:”temp3”}, 
      {id:4,name:”temp4”}
    ]
    
    不使用循环。
    javascript有这样的函数来优化代码吗?

    如果您想优化可读性,您可以使用如下方法:

    const a1=[{id:1,名称:'temp1'},{id:2,名称:'temp2'},{id:3,名称:'temp3'},{id:4,名称:'temp4'}]
    常数a2=[3,4]
    console.log(
    a1.过滤器(i=>a2.包括(i.id))
    )
    不使用循环。javascript是否具有优化代码的功能

    是的,JavaScript有
    forEach
    filter
    map
    reduce

    从文档中:

    [Array]迭代方法 有几种方法将函数作为参数,在处理数组时回调。调用这些方法时,将对数组的长度进行采样,并且不会访问从回调中添加的超出此长度的任何元素。如果方法随后访问更改的元素,则对数组的其他更改(设置元素的值或删除元素)可能会影响操作的结果。虽然这些方法在这种情况下的具体行为是定义良好的,但您不应该依赖它,以免混淆可能阅读您的代码的其他人。如果必须修改数组,请改为复制到新数组中

    Array.prototype.entries()
    Array.prototype.every()
    Array.prototype.filter()
    Array.prototype.find()
    Array.prototype.findIndex()
    Array.prototype.forEach()
    Array.prototype.keys()
    Array.prototype.map()
    Array.prototype.reduce()
    Array.prototype.reduceRight()
    Array.prototype.some()
    Array.prototype.values()
    Array.prototype[@@iterator]()
    

    const a1=[
    {id:1,名称:'temp1'},
    {id:2,名称:'temp2'},
    {id:3,名称:'temp3'},
    {id:4,名称:'temp4'}
    ];
    常数a2=[3,4];
    console.log(
    a2.map(id=>a1.find(=>id===\u1.id))
    
    );如果有这样的函数,并且其中包含一个循环,该怎么办?这与自己编写循环有什么不同?换句话说,“循环是坏的,删除循环”不是进行代码优化的方式。您可以对代码进行评测/基准测试,找到瓶颈,然后考虑修复它们。@SergioTulentsev本机javascript数组函数是否也包含类似下划线.js数组函数的循环?没有循环是不可能的(对于
    while
    ,可以是隐式循环,但无论如何它至少是
    O(n)
    其中n是第二个数组中的元素数,因为它表示第一个数组中基于1的索引,很可能是
    O(n*m)
    否则)@LabeebShareef。循环是一种基本的控制流结构。您无法避免它(除了递归,但这是一个完全不同的主题)@Aprillion:“给定它表示第一个数组的基于1的索引”-不,是ids(我想)