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

时间:2015-10-03 12:16:24

标签: javascript arrays recursion

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

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

2 个答案:

答案 0 :(得分:4)

让我们打破这个: return [].filter.call(iterable,(function (a, i) { return iterable[i - 1] !== a }));

*。我们正在返回一个数组。

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

*。 filter函数为返回true的每个元素返回数组的子集。所以当每次检查索引call中基本上是前一个元素的元素是否不等于当前元素return iterable[i - 1] !== a时,如果它不相等,我们返回true时执行i-1所以a元素是要返回的子集数组的一部分。

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

a

答案 1 :(得分:0)

@daymos回调使用三个参数来调用。参见here