循环不在数组和循环内循环比较数组的元素

时间:2018-05-10 12:13:07

标签: javascript

在这个函数中我尝试循环到一个数组,然后返回以下内容:如果年份由所有不同的数字组成,那么这是一个快乐的一年,应该存储在它所属的地方,在快乐数组。如果没有,它应该进入 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]

1 个答案:

答案 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])< /强>

你只检查与他人的第一个数字,你也不用第三个和第四个,第三个数字检查第二个数字。

试试这个

&#13;
&#13;
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;
&#13;
&#13;