Javascript 高阶函数:将回调函数传递给过滤器不起作用

Javascript Higher order functions: Passing a callback function into filter not working

我正在尝试通过 return 为真的值来过滤掉数组的值。我有一个名为 noRepeat 的函数,如果给定年份没有重复数字,则 return 为真,否则为假。

我有另一个名为 no_repeats(yearStart, yearEnd) 的函数,它创建一个从开始到结束的年份数组。我想按那些没有重复数字的年份过滤掉这个数组,但我不确定为什么这不起作用。有任何想法吗?我也包含了问题陈述,并且在代码中我展示了我的输出是什么以及它应该是什么。

 Write a function, `no_repeats(year_start, year_end)`, which takes a
 range of years and outputs those years which do not have any
 repeated digits.

 You should probably write a helper function, `no_repeat?(year)` which
 returns true/false if a single year doesn't have a repeat.

 Difficulty: 1/5

function no_repeats(yearStart, yearEnd){
    //call no repeats on each year from yearStart to yearEnd and return an array of years that have noRepeat(year) === true
    var yearRangeArr = [];
    var returnArr = [];
    while (yearEnd >= yearStart){
        yearRangeArr.push(yearEnd);
        yearEnd-=1;
    }
    yearRangeArr.filter(function(year){
        return noRepeat(year);
    });
    return yearRangeArr;


}

function noRepeat(year){ //works
    //create an array pushing each year's digits
    // if arr.indexOf(digit) > -1 then the digit already exists, so return false
    // else append the digit, and if no digit repeats, return true
    year = year.toString();
    var repeatArr = [];
    for (i = 0; i < year.length; i++){
        //console.log(repeatArr);
        if (repeatArr.indexOf(year[i]) > -1){ //if the digit exists in arr
            return false;
        }
        else{
            repeatArr.push(year[i]);
        }
    }
    return true;
}

//var testArr= [1,2,3,4,2];
//console.log(testArr.indexOf(10));

//console.log(noRepeat(1234));
console.log(no_repeats(1234, 1234)); //== [1234]); 
console.log(no_repeats(1123, 1123)); // == []); ANSWER SHOULD BE [], I'M GETTING [1123].

filter() returns 新值,它不会改变原始对象。您必须将返回值分配给您的变量:

yearRangeArr = yearRangeArr.filter(function(year){
    return noRepeat(year);
});