这是我前一段时间完成的coderbyte挑战。你的功能应该是我最初使用的第二个最大和第二个最低数字:
function SecondGreatLow(arr){
var sorted = arr.sort(function(a,b){
return a-b;
});
return sorted[1] + " " + sorted[arr.length - 2];
}
SecondGreatLow(readline());
我有两个案例错误,其中一个是([2,2,2,5,5,5,6]),因为有重复的数字。我在我的新代码中实现了这个:
function SecondGreatLow(arr) {
var exclude = [arr[0]];
for(var i = 1; i < arr.length; i++) {
if (exclude.indexOf(arr[i]) == -1) {
exclude.push(arr[i]);
}
}
return exclude
}
SecondGreatLow([33,33,33,44,44,44,55,55,6,4,3])
我的问题是如何找到所有重复的数字?变量不是排除(arr [0])33吗?我很困惑如何摆脱所有重复的数字。
答案 0 :(得分:0)
我的问题是如何找到所有重复的数字?
它实际上找不到重复值,它会收集唯一值。
您遍历原始数组并仅将exclude
中的值添加到exclude
中。这可以保证exclude
中的每个值都是唯一的。
我的问题是如果原来排除只是arr [0]或33
,它是如何做到的
这一行:
var exclude = [arr[0]];
它过去常常没有以空数组开头。正如您在for
声明中所看到的那样
for(var i = 1; i < arr.length; i++) {
代码开始在索引1
迭代,而不是0
。你也可以刚开始使用一个空数组:
var exclude = [];
for(var i = 0; i < arr.length; i++) {
但这有点浪费,因为你知道第一个值无论如何都会被添加到exclude
。
答案 1 :(得分:0)
此代码的工作方式是将新变量添加到数组排除中。如果当前变量在数组排除中不存在,它将仅添加新变量。 这一行:
exclude.indexOf(arr[i]) == -1
是做主要工作的。 它找到变量i并检查它是否已存在于数组排除中。如果它不存在,indexOf返回-1,因此if语句为true,我们进入行
exclude.push(arr[i]);
并将变量添加到数组exclude中。
答案 2 :(得分:0)
在下面的循环中
for(var i = 1; i < arr.length; i++) {
if (exclude.indexOf(arr[i]) == -1) {
exclude.push(arr[i]);
}
}
正在检查输入数组中的数字是否已经存在于排除中,否则它将插入要排除的数字。
indexOf()方法在数组中搜索指定的项,并返回其位置。因此,如果重复数字,它将不会返回-1,因此上面的逻辑将跳过添加该重复数字以取消变量。您可以参考下面的详细信息。