js Array.prototype.filter.call() - 有人可以解释我这段代码是如何工作的

js Array.prototype.filter.call() - can someone explain me how this piece of code works?

本文关键字:代码 段代码 何工作 工作 call filter prototype Array js 解释      更新时间:2023-09-26

有人可以解释这段代码是如何工作的吗?输出是带有输入字母但没有重复的向量。

var uniqueInOrder = function (iterable) {
  return [].filter.call(iterable, (function (a, i) {
    return iterable[i - 1] !== a
  }));
}
console.log(uniqueInOrder("aaaaaBBBDSJJJJ"))

让我们分解一下: return [].filter.call(iterable,(function (a, i) { return iterable[i - 1] !== a }));

*. 我们返回一个数组。

*. 使用 .filter.call(iterable, 允许我们在iterable上使用 Array.prototype.filter 方法,这是一个字符串(使函数将字符串视为字符数组(,因为call获取的第一个参数是上下文。

因此,每次执行return iterable[i - 1] !== a时,我们检查索引 i-1 中的元素(基本上是前一个元素(是否不等于当前元素a如果它不相等,则返回 true,因此a元素是正在返回的子集数组的一部分。

请注意,最简单的理解方法是调试,只需将此代码粘贴到开发人员工具栏控制台中即可:

 var uniqueInOrder = function (iterable)
    {debugger;
      return [].filter.call(iterable,(function (a, i) { return iterable[i - 1] !== a }));
    }
    console.log(uniqueInOrder("aaaaaBBBDSJJJJ"))

@daymos 回调由三个参数调用。 看这里。