筛选器函数给我字符串Javascript错误

筛选器函数给我字符串Javascript错误,javascript,node.js,Javascript,Node.js,实现函数unique_in_order,该函数以一个序列作为参数,并返回一个项目列表,其中没有任何元素彼此相邻且具有相同值,并保留元素的原始顺序 例如: uniqueInOrder('AAAABBBCCDAABBB')==['A','B','C','D','A','B'] uniqueInOrder('abbccd')==['A','B','C','C','A','D'] 唯一顺序([1,2,2,3,3])==[1,2,3] 我尝试在给定的参数上使用一个过滤函数来解决这个问题。以下是我的尝试:

实现函数unique_in_order,该函数以一个序列作为参数,并返回一个项目列表,其中没有任何元素彼此相邻且具有相同值,并保留元素的原始顺序

例如:

uniqueInOrder('AAAABBBCCDAABBB')==['A','B','C','D','A','B']

uniqueInOrder('abbccd')==['A','B','C','C','A','D']

唯一顺序([1,2,2,3,3])==[1,2,3]

我尝试在给定的参数上使用一个过滤函数来解决这个问题。以下是我的尝试:

var uniqueInOrder = function (iterable) { 
return iterable.filter(function(current, index, array){
    if (index === 0){
      return true;
    }
    else if (current[current.length - 1] === array[index]){
      return false;
    } 
    else {
      return true;
    }
  });
};
问题是,我得到了这个错误,我不明白为什么它没有检测过滤器作为一个函数

这是我给它的参数:

uniqueInOrder(“AAAABBBCCDAABBB”)

以下是错误:

const newArray = iterable.filter(function (current, index, array) {
                            ^

TypeError: iterable.filter is not a function
    at uniqueInOrder (c:\Users\Anthony\source\repos\Web Dev\Unique in Order\script.js:2:29)
    at Object.<anonymous> (c:\Users\Anthony\source\repos\Web Dev\Unique in Order\script.js:15:1)
    at Module._compile (internal/modules/cjs/loader.js:1133:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10)
    at Module.load (internal/modules/cjs/loader.js:977:32)
    at Function.Module._load (internal/modules/cjs/loader.js:877:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47
const newArray=iterable.filter(函数(当前、索引、数组){
^
TypeError:iterable.filter不是函数
按唯一顺序(c:\Users\Anthony\source\repos\Web Dev\Unique-in-Order\script.js:2:29)
at对象。(c:\Users\Anthony\source\repos\Web Dev\Unique-in-Order\script.js:15:1)
at模块编译(内部/modules/cjs/loader.js:1133:30)
at Object.Module._extensions..js(internal/modules/cjs/loader.js:1153:10)
at Module.load(内部/modules/cjs/loader.js:977:32)
at Function.Module._load(内部/modules/cjs/loader.js:877:14)
在Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:74:12)
在internal/main/run_main_module.js:18:47

字符串没有
过滤器
-另外,创建
然后转换为数组要简单得多:

var uniqueInOrder = iterable => [...new Set(iterable)];
或者为了坚持您的想法(忽略您的算法并简单地修复错误),执行一个简单的ES6排列:

return [...iterable].filter(...);
或者如果是旧环境:

return (typeof iterable == "string" ? iterable.split("") : iterable).filter(...);
字符串不是数组(与某些其他语言相反),因此它们不提供
筛选方法:


将给定的
iterable
参数转换为具有
iterable=array.from(iterable)
(IE本机不支持)的数组,或使用
if(typeof iterable=='string'){iterable=iterable.split('';}显式拆分字符串

使用我的实现:
filter.withIndex
。可用于字符串和数组

const{filter}=require('rubico')
常量uniqueInOrder=过滤器。withIndex((当前、索引、数组)=>{
如果(索引==0){
返回真值
}else if(当前===数组[索引-1]){
返回错误
}否则{
返回真值
}
})
唯一顺序('AAAABBBCCDAABBB')/=>ABCDAB
唯一顺序('abbcad')/=>ABCcAD
唯一顺序([1,2,2,3,3])/=>[1,2,3]

字符串没有
过滤器
方法。