Javascript 在一个数组中搜索多个值的代码是如何工作的?

Javascript 在一个数组中搜索多个值的代码是如何工作的?,javascript,arrays,foreach,duplicates,Javascript,Arrays,Foreach,Duplicates,我正在寻找一种在数组中查找多个值的解决方案,并发现: 函数查找数组中的重复数组(arra1){ var对象={}; var结果=[]; arra1.forEach(功能(项目){ 如果(!对象[项目]) 对象[项目]=0; 对象[项目]+=1; }) for(对象中的var prop){ 如果(对象[prop]>=2){ 结果:推动(支撑); } } 返回结果; } log(在数组中查找重复的数组([1,2,-2,4,5,4,7,8,7,71,3,6])这是代码,每行都有注释!我希望它能帮助你

我正在寻找一种在数组中查找多个值的解决方案,并发现:

函数查找数组中的重复数组(arra1){
var对象={};
var结果=[];
arra1.forEach(功能(项目){
如果(!对象[项目])
对象[项目]=0;
对象[项目]+=1;
})
for(对象中的var prop){
如果(对象[prop]>=2){
结果:推动(支撑);
}
}
返回结果;
}

log(在数组中查找重复的数组([1,2,-2,4,5,4,7,8,7,71,3,6])这是代码,每行都有注释!我希望它能帮助你;)

函数查找数组中的重复数组(arra1){
//输入数组中每个项的临时计数/
var对象={};
//包含已查看多次的每个项目的最终结果。
var结果=[];
//对于数组的每个项。。。
arra1.forEach(功能(项目){
//如果它不在临时对象中,则将其初始化为0。
如果(!对象[项目])
对象[项目]=0;
//添加一个,因为我们刚刚找到它!
对象[项目]+=1;
})
//现在,输入数组的每一项都已在对象中计数。
//对于每个对象项:
for(对象中的var prop){
//如果已计数多次,则将其添加到结果中。
如果(对象[prop]>=2){
结果:推动(支撑);
}
}
//返回结果。
返回结果;
}
log(在数组中查找重复的数组([1,2,-2,4,5,4,7,8,7,71,3,6])可能您缺少的,可能是

if (!object[item]) {
    object[item] = 0;
}
object[item] += 1;
这意味着,如果
object[item]
不是,那么将
object[item]
赋值为零

然后增加这个值

if (!object[item])    // no block statement
    object[item] = 0; // then part finished with semicolon
object[item] += 1;    // code after the condition

给定的代码是对上述内容的有效更改,只接受一条语句,该语句以分号结尾。在这种情况下,您不需要block语句。

如果
对象
还没有
[item]
属性,它将被分配给
0
,因此可以将其添加到
+=1
中。(与索引0无关)如果它与索引无关,那么它是用来计数的吗?如果是这样的话,为什么不首先直接添加+1呢?使用lodash另一个可能引起混淆的原因是名称
object
,使用几乎任何其他名称都会更好。我会使用
计数器
。没有
{}
的if语句只会崩溃并烧掉某人对事物如何工作的理解,特别是在下一个
for
循环中有一个if时,它确实有
{}
-代码审阅失败!“添加一个,因为我们刚刚找到它!”不,“总是添加一个”是这行的功能。缺少大括号有点混乱。啊,所以object[item]=0;是初始化它,然后使用object[item]+=1计算正确的出现次数;对吗?@Shaz就是这样。在
if
语句之后,如果没有大括号,则只执行下一条指令!如果开发人员不是很严格,它可能会非常混乱,并且是一条危险的捷径。当然,如果尚未将其初始化为
0
,则执行
+1
将得到
NaN
,因此您必须在第一次将其设置为
0
。是的。对这个问题的评论听起来好像没有
{
}
是一个错误,但重要的是要指出它不是。它是语言语法的一部分。当OP将来查看其他人的代码时,他们会更频繁地遇到相同的构造,他们应该知道它是这样工作的。