Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以用Javascript中的数组方法重写这个条件更好(更短)的双循环吗_Javascript_Arrays_Typescript - Fatal编程技术网

我可以用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

我是否可以使用Javascript中的数组方法,以更好的方式(更短的时间)在内部使用条件和方法调用重写这个双循环

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个循环正在迭代),但在我看来,您必须始终在代码的可读性/可维护性和效率之间做出决定,因为这是进一步开发中的一个关键事实。