有人可以解释这段代码是如何工作的吗? 输出是带有输入字母但没有重复的矢量。
var uniqueInOrder = function (iterable) {
return [].filter.call(iterable, (function (a, i) {
return iterable[i - 1] !== a
}));
}
console.log(uniqueInOrder("aaaaaBBBDSJJJJ"))
答案 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。