嘿家伙我是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.
这些“双”返回嵌套在匿名函数中;他们没有从相同的背景中返回。
由内而外的工作:
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)