在这个函数中我尝试循环到一个数组,然后返回以下内容:如果年份由所有不同的数字组成,那么这是一个快乐的一年,应该存储在它所属的地方,在快乐数组。如果没有,它应该进入 notHappy 数组。
现在出现问题:
1)我尝试的 IF 条件不返回任何内容[]
。我很确定这不是正确的做法。
for (var i = 0; i <= t.length; i++) {
if (i[0] != i[1] && i[0] != i[2] && i[0] != i[3]) {
o.happy.push(i++);
} else {
o.notHappy.push(i++)
}
}
2)我尝试了一个简单的i%2 === 0
条件的同一个循环,我发现循环完全忽略了我的 arr 并返回[0, 2, 4]
而不是实际的数字。它就像从0
本身开始循环一样。怎么样?
function nextHappyYear(arr){
var o = {
happy: [],
notHappy: []
};
var t = arr.map(e => e.toString().split(""));
for (var i = 0; i <= t.length; i++) {
if (i%2 === 0) {
o.happy.push(i++);
} else { o.notHappy.push(i++)}
}
return console.log(o.happy)
}
nextHappyYear([1021, 1022, 1023, 1024]) // returns [0, 2, 4] instead of [1022, 1024]
答案 0 :(得分:0)
您的代码存在一些问题
1-for(var i = 0; i&lt; = t.length; i ++)
数组索引从0开始,以length - 1
结尾。所以你的条件i <= t.length
会出错。将其更改为i < t.length
。
2-if(i%2 === 0)
这不是你的问题。您必须获得一年中的所有数字并检查它们是否相等。
第3-o.happy.push(I ++); 强>
这部分有2个问题。首先,您将happy
数组推入当年的索引,而不是年份。第二,i++
增加i
一年零一年将被跳过!
4-if(i [0]!= i [1]&amp;&amp; i [0]!= i [2]&amp;&amp; i [0]!= i [3])< /强>
你只检查与他人的第一个数字,你也不用第三个和第四个,第三个数字检查第二个数字。
试试这个
function hasDuplicate(arr) {
arr.sort()
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i + 1] == arr[i]) {
return true;
}
}
return false;
}
function happyYear1(arr) {
var o = {
happy: [],
notHappy: []
};
for (var i = 0; i < arr.length; i++) {
if (!hasDuplicate((arr[i] + '').split(""))) {
o.happy.push(arr[i]);
} else {
o.notHappy.push(arr[i]);
}
}
return o;
}
var output = happyYear1([1021, 1022, 1023, 1024]); // returns [0, 2, 4] instead of [1022, 1024]
console.log(output);
&#13;