javascript - 无法理解这段JS代码【数组和过滤器】

标签 javascript arrays

我遇到一个问题,要求我们这样做

combine arrays

var array1 = [1, 2, 3]; 
var array2 = [2, 30, 1];

然后删除所有重复的项目,以便预期输出为

[1, 2, 3, 30]

在评论部分有一个我无法理解的解决方案:

var array1 = [1, 2, 3];
var array2 = [2, 30, 1];
function concatArrays(array1, array2){
    var concated = array1.concat(array2);
    var solution = concated.filter(function(element,Index,self){
        return Index== self.indexOf(element);
    });
console.log(solution);
}
concatArrays(array1,array2);

所以我想理解这一行

var solution = concated.filter(function(element,Index,self){
        return Index == self.indexOf(element);
    });

我知道过滤器方法的作用,但在返回部分我无法理解他的代码。
这就是我认为返回部分的作用:
元素索引当前元素索引进行比较。如果相等则返回,否则不执行任何操作。
不知道我的理解对还是错。

最佳答案

您可以为过滤器循环的每个步骤插入一个输出并检查值,您会得到

                                                   result
  element       index     indexOf   comparison      array
----------  ----------  ----------  ----------  ----------
        1           0           0        true           1
        2           1           1        true           2
        3           2           2        true           3
        2           3           1       false
       30           4           4        true          30
        1           5           0       false

如您所见,如果比较为true,则该项目将进入结果。这意味着,实际元素的索引必须与 Array#indexOf 的值相同。 。 indexOf 返回所需项目的第一个索引,如果未找到,则返回 -1。因此,如果索引和 indexOf 的值不相等,那么您找到了第二个或第三个值,但不是第一个。

function concatArrays(array1, array2) {
    var concated = array1.concat(array2);
    console.log('element', 'Index', 'indexOf', 'comparison');
    var solution = concated.filter(function (element, Index, self) {
        console.log(element, Index, self.indexOf(element), Index == self.indexOf(element));
            return Index == self.indexOf(element);
        });
    console.log(solution);
}

var array1 = [1, 2, 3];
var array2 = [2, 30, 1];

concatArrays(array1, array2);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 无法理解这段JS代码【数组和过滤器】,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43017990/

相关文章:

javascript - 回调中的 Socket.io-emit 给出 SyntaxError : Unexpected end of JSON input

javascript - 为什么我的 JavaScript 音频自动播放不起作用?

python - 通过沿对角线复制给定数组在 numpy 中创建矩阵的有效方法

javascript - 过滤和映射后如何获取用户ID

php - 如何根据编号设置我的行跨度值。查询中的结果并根据其集合 ID 更改值(如果它是组或集合)?

c# - 如何从数组中随机选择一行?

javascript - 显示带单引号的文本字段

javascript - React应用程序中的数据流

javascript - 将对象与模块模式组合时我做错了什么

c - 在 C 中,如何访问指针数组(作为参数传递)