首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >indexOf不是函数

indexOf不是函数
EN

Stack Overflow用户
提问于 2015-07-23 22:16:26
回答 4查看 26.5K关注 0票数 3

我有个活动..。

代码语言:javascript
复制
   <textarea id="chat"> </textarea>
   <button type="button" onclick="play_song();">talk</button>

..。触发以下function

代码语言:javascript
复制
   var input = function() {
           var chat = document.getElementById("chat").value.split(" ");
           return chat && console.log(chat);
        }

然后是这个function

代码语言:javascript
复制
   function setIntersection(a, b) {

      var result = [];

      for (var i = 0; i < a.length; i++) {
         if (b.indexOf(a[i]) !== -1 && result.indexOf(a[i]) === -1) {
            result.push(a[i]);
         }
      }
    return result;
   }

一个prototype function

代码语言:javascript
复制
   Song.prototype.lyricsIntersect = function(input) {


      var bestSong = null;
      var bestCount = -Infinity;

      for (var i in songs) {
        var currentCount = setIntersection(songs[i].lyrics, input).length;

    if (currentCount > bestCount) {
        bestSong = songs[i];
        bestCount = currentCount;
    }
}

return bestSong && bestSong.name;
}

代码结束于此:

代码语言:javascript
复制
   function play_song() {

    var id = Song.prototype.lyricsIntersect(input);
    var element = document.getElementById(id);
    element.play();
}

但是console.log返回:Uncaught TypeError: b.indexOf is not a function

但是,如果我测试var input = ["one", "two"];,就会根据input在代码上完成交集。

我遗漏了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-23 22:32:04

代码语言:javascript
复制
var currentCount = setIntersection(songs[i].lyrics, input).length;

应该是

代码语言:javascript
复制
var currentCount = setIntersection(songs[i].lyrics, input()).length;

这也依赖于输入被更正如下

代码语言:javascript
复制
var input = function() {
   var chat = document.getElementById("chat").value.split(" ");
   return chat;
}
票数 2
EN

Stack Overflow用户

发布于 2015-07-23 22:34:55

我遗漏了什么?

在这里,您将输入声明为全局输入并分配一个函数:

代码语言:javascript
复制
var input = function() {
    var chat = document.getElementById("chat").value.split(" ");
    return chat && console.log(chat);
}

我更喜欢函数声明,但每个函数声明都是各自的。

在这里,将输入作为参数传递给Song.prototype.lyricsIntersect

代码语言:javascript
复制
var id = Song.prototype.lyricsIntersect(input);

,它将其分配给自己的变量输入。

代码语言:javascript
复制
Song.prototype.lyricsIntersect = function(input) {

然后调用setIntersection

代码语言:javascript
复制
    var currentCount = setIntersection(songs[i].lyrics, input).length;

然后在setIntersection中将它赋值给b参数:

代码语言:javascript
复制
function setIntersection(a, b) {

就像一个数组:

代码语言:javascript
复制
     if (b.indexOf(a[i]) !== -1 && result.indexOf(a[i]) === -1) {
票数 3
EN

Stack Overflow用户

发布于 2015-07-23 22:26:06

为了能够使用indexOf对象的Array函数,您的b变量必须是array。检查您的b类型。

这是关于Array.prototype.indexOf()函数

编辑:

根据您提供的信息,您的b似乎是对input的引用。您需要确保inputarray。如果你提供了..。input实际上是一个函数,而不是array

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31599012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档