2015-10-20 31 views
2

這是一個問題鏈接到我已經問過的另一個問題(請參見:Sort list items from random child)。使用IndexOf的分割陣列不起作用

問題是我有一個我想從隨機項目中拆分的項目列表。我試着用「IndexOf()」,但它總是返回-1。任何想法我做錯了什麼?

這裏是我的代碼:

HTML

<ul class="myClass"> 
     <li class="item"> 
      <a href="URL" title="Company A" target="_blank"> 
      <span class="logo"> 
       <img src="images/logo1.jpg"> 
      </span> 
      </a> 
     </li> 
     <li class="item"> 
      <a href="URL" title="Company B" target="_blank"> 
      <span class="logo"> 
       <img src="images/logo2.jpg"> 
      </span> 
      </a> 
     </li> 
     <li class="item"> 
      <a href="URL" title="Company C" target="_blank"> 
      <span class="logo"> 
       <img src="images/logo3.jpg"> 
      </span> 
      </a> 
     </li> 
     <li class="item"> 
      <a href="URL" title="Company D" target="_blank"> 
      <span class="logo"> 
       <img src="images/logo4.jpg"> 
      </span> 
      </a> 
     </li> 
     <li class="item"> 
      <a href="URL" title="Company E" target="_blank"> 
      <span class="logo"> 
       <img src="images/logo5.jpg"> 
      </span> 
      </a> 
     </li> 
    ... 
    </ul> 

JAVASCRIPT

function randomizeChild(){ 
     var listItems = []; 

     $('ul.myClass li').each(function() { 
      listItems.push(this); 
     }); 

     var randomChild = Math.round(Math.random() * listItems.length); 

     console.log("Random Child ---> " + randomChild); 

     var indexToSplit = listItems.indexOf(randomChild); 
     var first = listItems.slice(0, indexToSplit); 
     var second = listItems.slice(indexToSplit + 1); 

     console.log(indexToSplit); // it returns always -1 :(
     console.log(first, second); 

     } 
+3

你'randomChild'已經是隨機指標,沒必要把它傳遞到'indexOf'以及...現在,你基本上是問「給我索引的索引...」 – nem035

+0

我認爲'listItems'是一個字符串數組,並且'randomChild'包含一個整數或者double,所以'listItems.indexOf(randomChild)'總是會返回'-1' – CrakC

+0

只需使用更多的jQuery,並解決它自己 - > ** http://jsfiddle.net/fdz52g2y/** – adeneo

回答

2

你的問題是,你越來越是一個整數索引和檢查的的indexOf數組中不存在的整數。你有一組元素。

http://jsfiddle.net/h2a4L67k/

試試這個:

function randomizeChild() { 
    var listItems = []; 

    $('ul.myClass li').each(function() { 
     listItems.push(this); 
    }); 

    var randomChild = Math.round(Math.random() * listItems.length); 

    console.log("Random Child ---> " + randomChild); 

    var randomChildObject = listItems[randomChild]; 
    var indexToSplit = listItems.indexOf(randomChildObject); 
    var first = listItems.slice(0, indexToSplit); 
    var second = listItems.slice(indexToSplit + 1); 

    console.log(indexToSplit); // it returns always -1 :(
    console.log(first, second); 

} 

你甚至都不需要做的是以上。你已經有一個隨機指數因此就使用它的時候了:

function randomizeChild() { 
    var listItems = []; 

    $('ul.myClass li').each(function() { 
     listItems.push(this); 
    }); 

    var randomIndex = Math.round(Math.random() * listItems.length); 

    console.log("Random Child ---> " + randomIndex); 

    var first = listItems.slice(0, randomIndex); 
    var second = listItems.slice(randomIndex + 1); 

    console.log(randomIndex); // it returns always -1 :(
    console.log(first, second); 

} 

小提琴:http://jsfiddle.net/h2a4L67k/1/

+1

當我們已經有'randomChild'那麼提取listItems [randomChild]'然後找到'listItems.indexOf(randomChildObject)'是什麼意思?價值不會改變! – CrakC

+1

是的,我只是在他現在的例子中出現了什麼問題。我在下面添加了一部分,解釋它是額外的工作,但感謝您指出! =] – AtheistP3ace