我有两个数组。
对象数组
[ {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有这样的功能来优化代码吗?
答案 0 :(得分:2)
如果您要针对可读性进行优化,则可以像这样使用filter和includes:
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具有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]()
请参见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) )
);