对称差异(了解此功能的范围)

时间:2017-08-08 10:44:32

标签: javascript arrays scope closures reduce

我正在完成FCC的任务,即获得不同数量阵列的对称差异。我被卡住的部分原因是因为我将结果数组放置在我将推送独特元素的地方。我在函数makeSym之外有它,我需要在检查出提示页面时发现它。但我不知道为什么。

function sym() {

    var results = []; // I had the results array here rather than inside function makeSym


    var allArrays = [];
    for (var i = 0; i < arguments.length; i++) {
        allArrays.push(arguments[i]);
    }

    function makeSym(arrOne, arrTwo) {

        // when the results array was placed here, it worked

        arrOne.forEach(function (a) {
            if (arrTwo.indexOf(a) === -1 && results.indexOf(a) === -1) {
                results.push(a);
            }
        });

        arrTwo.forEach(function (a) {
            if (arrOne.indexOf(a) === -1 && results.indexOf(a) === -1) {
                results.push(a);
            }
        });

        return results;
    }

    return allArrays.reduce(makeSym);

}

sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5]);

我的问题是为什么这会改变我的结果,为什么我没有得到正确的对称差异。我失踪的机制中发生了什么。 这两个位置之间的差异是1,4,5的回报和1,3,4,5的结果(正确答案应该是1,4,5)

我假设这与范围和闭包有关,这是我真正想要了解的内容,任何信息都会有所帮助。

我的问题的第二部分对于仍然和我在一起的人来说,为什么减少这方面的工作,减少做什么。我理解它将单个数组减少到我的多个数组但是为什么函数makeSym不会单独执行此操作,在我看来我应该能够以allArrays作为参数执行函数然后返回结果并以这种方式完成挑战,但是这个不起作用,它不起作用的原因对我来说根本不明显。任何解释都会帮助我更多地了解这一点并继续前进。干杯

0 个答案:

没有答案