簡體   English   中英

Javascript無法按順序調用未定義的方法'indexOf'

[英]Javascript Cannot call method 'indexOf' of undefined at order

我需要制作一個將字符串排序的函數。 字符串中的每個單詞都將包含一個數字。 數字可以從1到9(無0)。

例如輸入:“ is2 Thi1s T4est 3a”,該函數應返回“ Thi1s is2 3a T4est”。

我的代碼是:

 function order(words)
 {
 // ... 

    if(words == '')
    {
      return words;
    }

    var all_words = words.split(" ");
    var checked_words = new Array(); 
    var joined_words = "";

    for(i = 1; i <= 9; i++)
    {
      //console.log(checked_words);
      //checked_words[i-1] = all_words;
      for(j = 1;j <= all_words.length; j++)
      {
        if(all_words[i-1].indexOf(i) != -1)
        {
          checked_words.push(all_words[i-1]);

          if(i == (all_words.length))
          {
            joined_words = checked_words.join(" ");
            return joined_words;
          }
        }
      }
    }
  }

問題是它一直顯示“ TypeError:無法按順序調用未定義的方法'indexOf'”。 請幫忙謝謝!

我一直試圖弄清楚第一個循環在做什么,最后我意識到它正在檢查字符串中的數字。 您不應該那樣做,因為它是1)怪異的,2)不起作用的,如果它起作用的話。

而是使用一個循環和一個正則表達式在字符串中查找數字。

for (var i = 0; i < all_words.length; i++) {

  // take the first match and coerce it to an integer
  var n = +all_words[i].match(/\d+/)[0];
  checked_words[n] = all_words[i];
}

// checked_words has an undefined element at index 0;
// slice takes a copy of the array from index 1
return checked_words.slice(1).join(' ');

演示

或者,您可以使用reduce

var joined_words = str.split(' ').reduce(function (p, c) {
  var n = +c.match(/\d+/)[0];
  p[n] = c;
  return p;
}, []).slice(1).join(' ');

演示

您甚至都不受數字0-9的束縛。 只要您過濾掉未定義的元素,您就是金...

var str = 'is2 Thi1s T4est 3a Ye12s!';

var out = str.split(' ').reduce(function (p, c) {
  var n = +c.match(/\d+/)[0];
  p[n] = c;
  return p;
}, []).slice(1).filter(function (el) {
  return el !== undefined;
}).join(' ');

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM