有人可以解释一下这段代码是如何工作的吗? 输出是一个向量,包含输入的字母但没有重复。
var uniqueInOrder = function (iterable) {
return [].filter.call(iterable, (function (a, i) {
return iterable[i - 1] !== a
}));
}
console.log(uniqueInOrder("aaaaaBBBDSJJJJ"))
有人可以解释一下这段代码是如何工作的吗? 输出是一个向量,包含输入的字母但没有重复。
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 回调函数被调用时会传递三个参数。请参见这里。
return []
*,所以我们正在返回一个数组。 - user663031