Javascript indexOf不是一个函数

Javascript indexOf不是一个函数,javascript,Javascript,我有一个简单的kata: 给定项目序列和该序列中的特定项目,立即返回指定项目后面的项目。如果项目在一个序列中出现多次,请在第一次出现后返回该项目。这适用于任何类型的序列 我的职能如下: function nextItem(xs, item) { for(const current of xs) { if(current === item) { const key = xs.indexOf(current); return xs[

我有一个简单的kata: 给定项目序列和该序列中的特定项目,立即返回指定项目后面的项目。如果项目在一个序列中出现多次,请在第一次出现后返回该项目。这适用于任何类型的序列

我的职能如下:

   function nextItem(xs, item) {
     for(const current of xs) {
       if(current === item) {
         const key = xs.indexOf(current); 
         return xs[key+1];
       }
     }
   }
测试示例:

Test.assertEquals(nextItem([1, 2, 3, 4, 5, 6, 7, 8], 5), 6);
Test.assertEquals(nextItem(['a', 'b', 'c'], 'd'), undefined);
Test.assertEquals(nextItem(['a', 'b', 'c'], 'c'), undefined);
Test.assertEquals(nextItem("testing", "t"), "e");
function* countFrom(n) { for (let i = n; ; ++i) yield i; }
Test.assertEquals(nextItem(countFrom(1), 12), 13);
一些测试通过了,但我得到了以下错误:

TypeError: xs.indexOf is not a function
at nextItem
at /home/codewarrior/index.js:30:19
at /home/codewarrior/index.js:37:5
at Object.handleError
    <anonymous>
TypeError:xs.indexOf不是函数
在nextItem
at/home/codewarior/index.js:30:19
at/home/codewarrior/index.js:37:5
at Object.handleError

是因为indexof希望接收字符串作为输入吗?
谢谢

TypeError:xs.indexOf不是一个函数
表示您正在对非数组的对象调用
indexOf()
。在调用
indexOf
之前,使用
console.log(xs)
检查输入内容


您的示例没有为我抛出错误(省略
测试部分,并调用
nextItem([1,2,3,4,5,6,7,8],5)
)。

测试提供的值似乎不是
数组或
字符串。您可以使用一种不需要
indexOf()
的算法,如下所示

function nextItem(xs, item) {
  let check = false;
  for(let i of xs){
    if(check === true) return i
    if(item === i) check = true;
  }
}

您得到了一个
indexOf
错误,因为在测试中使用了要测试的项目没有
indexOf
。在这种情况下,您不需要使用
索引of
(当然可以,但您必须使用
类型of
)来测试是否存在此类函数)。您可以改为使用标志来确定是否找到某个项。因此,当找到该项时,在下一个循环中,您必须返回当前值(实际上是下一个值)。检查下面的算法以获得指导

  found = false
  loop each item
       if (found)
           return current item
       if (current item == lookup item)
          found = true
  end loop
  return undefined

使用这些参数调用
nextItem
不会导致您描述的错误..?我可能用我的示例误导了您,我这样做只是为了让您了解预期结果。我现在添加了更多,但实际上在codewar网站上,他们没有向您显示失败的测试。也许您是对的,可能有一个测试,其中函数作为输入接收与字符串/数组不同的内容。