理解Double return语句是Javascript

Ale*_*nik 6 javascript

嘿家伙我是JS的新手,基本上每天都在学习新东西,我只是学习如何动态更新数组和东西,反正我常常尝试拿起网络的干净JS片段并调试它们,直到我了解它的真正含义.所以这是我今天发现的一个片段:

var array1 = [
                     { tagId: 1, tagName: 'tag 1' },
                     { tagId: 2, tagName: 'tag 2' },
                     { tagId: 3, tagName: 'tag 3' },
                     { tagId: 4, tagName: 'tag 4' }


         ];

         var array2 = [
                    { tagId: 1, tagName: 'tag 1' },
                    { tagId: 2, tagName: 'tag 2' },
                    { tagId: 8, tagName: 'tag 8' }
           ];

         var array3 = [
                    { tagId: 1, tagName: 'tag 1' },
                    { tagId: 0, tagName: 'tag 0' },
                    { tagId: 9, tagName: 'tag 3' },
                    { tagId: 12, tagName: 'tag 12' },
                   { tagId: 13, tagName: 'tag 3' },
                    { tagId: 14, tagName: 'tag 2' },
                    { tagId: 6, tagName: 'tag 6' },
           ];


var a4 = common(array1, array2, array3)
console.log(a4);

function common( /*…*/ ) {
    var a = arguments;
    res = a[0]
    for (var i = 1; i < a.length; i++) {
        res = res.filter(function (el) {
            return a[i].filter(function (el2) {
                return el2.tagId === el.tagId
            }).length
        })
    }
    return res
}
Run Code Online (Sandbox Code Playgroud)

基本上片段通过数组中的对象文字在其中晒太阳并过滤掉它们.现在,继承人我的问题.作为JS的新手,我遇到了一个有趣的案例,看到很多JS代码return快速连续使用该语句,或者说是一个接一个,通常它们是嵌套的,这对我来说是一个非常有趣的案例,因为通常我猜一个单一的return语句应该是所有人需要的.

无论如何,回到我的例子,我的困难是什么,如果你看到里面的代码common function,你会看到下面的代码:

res = res.filter(function (el) {
                return a[i].filter(function (el2) {
                    return el2.tagId === el.tagId
                }).length
            })
Run Code Online (Sandbox Code Playgroud)

我真的不理解双返回语句.我理解的是, return el2.tagId === el.tagId返回true或false并返回

a[i].filter(function (el2) {
                        return el2.tagId === el.tagId
                    }).length 
Run Code Online (Sandbox Code Playgroud)

返回长度,我认为应该是一个整数,但是返回执行的顺序是什么?谁return el2.tagId === el.tagId回来了?? .

当我看到双重回复声明时,我总是感到困惑,请有人向我解释一下吗?

jsfiddle 在这里.

编辑::尝试在你的答案中有点精心设计.

谢谢.

亚历克斯-Z.

joe*_*mfb 3

这些“双”返回嵌套在匿名函数中;他们没有从相同的背景中返回。

由内而外的工作:

return el2.tagId === el.tagId
Run Code Online (Sandbox Code Playgroud)

filter()从以下方法中的匿名函数返回布尔值a[i]

a[i].filter(function (el2) {
  return el2.tagId === el.tagId
})
Run Code Online (Sandbox Code Playgroud)

filter()该表达式结果的长度在以下方法的匿名函数内返回res

res = res.filter(function (el) {
  return a[i].filter(function (el2) {
    return el2.tagId === el.tagId
  }).length
})
Run Code Online (Sandbox Code Playgroud)

注意:length结果的属性被 强制转换为布尔值filter()

filter()是 Array 原型的一种方法,它构造一个由所提供的匿名函数返回 true 的项组成的新数组(请参阅 MDN:Array.prototype.filter