避免在JavaScript中循环以优化代码

时间:2019-05-19 10:17:36

标签: javascript

我有两个数组。

  1. 对象数组

    [ {id:1,name:”temp1”}, 
      {id:2,name:”temp2”}, 
      {id:3,name:”temp3”}, 
      {id:4,name:”temp4”}
    ]
    
  2. 一个数组

    [3,4]
    

我需要一个输出

[ {id:3,name:”temp3”}, 
  {id:4,name:”temp4”}
]

不使用循环。 javascript有这样的功能来优化代码吗?

2 个答案:

答案 0 :(得分:2)

如果您要针对可读性进行优化,则可以像这样使用filterincludes

const a1 = [{id:1,name:'temp1'}, {id:2,name:'temp2'}, {id:3,name:'temp3'}, {id:4,name:'temp4'}]
const a2 = [3, 4]

console.log(
  a1.filter(i => a2.includes(i.id))
)

P.S .:这显然不是针对性能进行优化的:O(n*m),但是OP在评论中询问了native javascript array functions also contain loops

答案 1 :(得分:0)

不使用循环。 javascript有这样的功能来优化代码吗?

是的,JavaScript具有forEachfiltermapreduce等。

从文档中:

  

[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]()

请参见MDN JavaScript Reference - Array Iteration Methods

const a1 = [
   {id:1,name:'temp1'},
   {id:2,name:'temp2'},
   {id:3,name:'temp3'},
   {id:4,name:'temp4'}
];

const a2 = [3, 4];

console.log(
    a2.map( id => a1.find( _ => id == _.id) )
);