我可以用Javascript中的数组方法重写这个条件更好(更短)的双循环吗
我是否可以使用Javascript中的数组方法,以更好的方式(更短的时间)在内部使用条件和方法调用重写这个双循环我可以用Javascript中的数组方法重写这个条件更好(更短)的双循环吗,javascript,arrays,typescript,Javascript,Arrays,Typescript,我是否可以使用Javascript中的数组方法,以更好的方式(更短的时间)在内部使用条件和方法调用重写这个双循环 listA.forEach(a => { listB.forEach(b => { if (a.name === b.name) { a.doSomething(b); } }); }); 不确定是否更好,但您可以这样做: listA .map(a => listB.map(b =&g
listA.forEach(a => {
listB.forEach(b => {
if (a.name === b.name) {
a.doSomething(b);
}
});
});
不确定是否更好,但您可以这样做:
listA
.map(a => listB.map(b => ({ a, b }))) // Create Pairs of { a, b }
.reduce((r, a) => a.concat(r)) // flatten { a, b }[][] to { a, b }[]
.filter(o => o.a == o.b) // filter the list
.forEach(o => o.a.doSomething(o.b)); // call the function
您可以将
if
语句更改为:
a.name === b.name && a.doSomething(b);
Idk,如果这是您想要的更好/更短的类型。它使用了。它不是更短,而是更具可读性,它更像是一种流式javascript方式,无需所有嵌套循环:
listA
.filter(a => listB.map(b => b.name).includes(a.name))
.forEach(a => {
console.log(a) // do your stuff here :)
})
不,基本上就是这么短。
doSomething
做什么?如果您试图进行数据操作,map
或reduce
可能比forEach
更好,但这取决于您所做的操作。Idk了解您对Lodash的感受,但它具有unionBy
功能。您可以对生成的数组执行forEach
。我喜欢它的读取方式,并像我所寻找的那样使用数组函数,但每个数组方法都会使引擎循环,对吗?因此,它将使引擎循环比原始循环多出一次?在很大程度上,它比您的循环效率更低(4个循环正在迭代),但在我看来,您必须始终在代码的可读性/可维护性和效率之间做出决定,因为这是进一步开发中的一个关键事实。