筛选器函数给我字符串Javascript错误
实现函数unique_in_order,该函数以一个序列作为参数,并返回一个项目列表,其中没有任何元素彼此相邻且具有相同值,并保留元素的原始顺序 例如:筛选器函数给我字符串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] 我尝试在给定的参数上使用一个过滤函数来解决这个问题。以下是我的尝试:
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]
字符串没有过滤器
方法。