2015-11-18 216 views
1

當我點擊我的計算按鈕時,從數組中提取值的新列表是可見的,但第二個數組缺少值。缺少的值並不總是相同的值。例如,如果我放入1,2,3,4,5,6,它並不總是缺少相同的數字,它可能是數組中的最後一個值,但我無法弄清楚我出錯的地方。下面的代碼:從列表中刪除值從列表中刪除

$(document).ready(function() { 
 
    function copyarray(arraytocopy) { 
 
    var theCopy = []; // An new empty array 
 
    for (var i = 0, len = arraytocopy.length; i < len; i++) { 
 
     theCopy[i] = arraytocopy[i]; 
 
    } 
 
    return theCopy; 
 
    } 
 

 
    function sortarray(arraytosort) { 
 
    arraytosort.sort(
 
     function(a, b) { 
 
     return Math.round(Math.random()); 
 
     } 
 
    ); 
 
    return arraytosort; 
 
    } 
 

 
    function checkarrays(newarray, oldarray) { 
 
    var swappositions = []; 
 

 
    for (var i = 0; i < newarray.length; i++) { 
 
     if (newarray[i] == oldarray[i]) { 
 
     //alert(oldarray[i] + ' is the SAME!'); 
 
     swappositions.push(newarray[i]); 
 
     } 
 
    } 
 

 
    var countsame = 0; 
 
    swappositions.reverse(); 
 
    for (var i = 0; i < newarray.length; i++) { 
 
     if (newarray[i] == oldarray[i]) { 
 
     ///alert(oldarray[i] + ' is the SAME!'); 
 
     newarray[i] = swappositions[countsame]; 
 
     countsame = countsame + 1; 
 
     } 
 
    } 
 

 
    for (var i = 0; i < newarray.length; i++) { 
 
     if (newarray[i] == oldarray[i]) { 
 
     //alert(oldarray[i] + ' is the SAME!'); 
 
     //swappositions.push(newarray[i]); 
 
     var elementbefore = newarray[i - 1]; 
 
     newarray[i - 1] = newarray[i]; 
 
     newarray[i] = elementbefore; 
 
     } 
 
    } 
 
    ///alert('test'); 
 
    ///alert('new array: ' + newarray); 
 
    ///alert('old array: ' + oldarray);  
 
    //alert(swappositions.toString()); 
 
    //alert($.inArray(swappositions[0], newarray)); 
 
    return true; 
 
    } 
 

 
    Array.prototype.randomize2 = function() { 
 

 
    var oldarray = copyarray(this); 
 

 
    sortarray(this); 
 
    var notthesame = checkarrays(this, oldarray); 
 

 
    if (notthesame = false) { 
 
     //alert('sort again'); 
 
     sortarray(this); 
 
     notthesame = checkarrays(this, oldarray); 
 
    } 
 

 

 
    //alert('new: '+this); 
 
    //alert('old: '+oldarray); 
 

 
    //alert('not the same!'); 
 
    return this; 
 
    }; 
 

 

 
    function makelist(myarray) { 
 

 
    var list = '<ol>'; 
 
    var listitem = ''; 
 

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

 
     if (/\S/.test(myarray[i])) { 
 

 
     listitem = '<li>' + $.trim(myarray[i]) + '</li>'; 
 
     list += listitem; 
 
     } 
 

 
    } 
 
    list += '</ol>'; 
 
    //alert(list.toString()); 
 
    return list.toString(); 
 

 
    } 
 

 

 

 
    function combinelists(ordered, random) { 
 

 
    var list = '<ol>'; 
 
    var listitem = ''; 
 

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

 
     if (/\S/.test(ordered[i])) { 
 
     if ($.trim(random[i]) == $.trim(ordered[i])) { 
 
      listitem = '<li class="same"><span class="yourname">' + $.trim(ordered[i]) + '</span> is matched with<span class="peersname">' + $.trim(random[i]) + '</span></li>'; 
 
      list += listitem; 
 
     } else { 
 
      listitem = '<li><span class="yourname">' + $.trim(ordered[i]) + '</span> is matched with <span class="peersname">' + $.trim(random[i]) + '</span></li>'; 
 
      list += listitem; 
 
     } 
 
     } 
 

 
    } 
 
    list += '</ol>'; 
 
    //alert(list.toString()); 
 
    return list.toString(); 
 

 
    } 
 

 

 

 
    $('#ranGen').click(function() { 
 
    //function randomize(){ 
 

 
    var lines = $('#names').val().split(/\n/); 
 
    var texts = []; 
 

 
    for (var i = 0; i < lines.length; i++) { 
 
     // only push this line if it contains a non whitespace character. 
 
     if (/\S/.test(lines[i])) { 
 
     texts.push($.trim(lines[i])); 
 
     } 
 
    } 
 

 

 

 

 
    var orderedlist = makelist(lines); 
 
    //$("#list").html(orderedlist); 
 

 
    var linescopy = $.extend(true, [], lines); 
 

 
    var randomarray = linescopy.randomize2(); 
 
    //alert(randomarray); 
 

 
    var randomlist = makelist(randomarray); 
 
    //$("#randomlist").html(randomlist); 
 

 

 
    var combinedlists = combinelists(lines, randomarray); 
 
    $("#combined").html(combinedlists); 
 

 

 
    }); 
 
});
textarea { 
 
    height: 100px; 
 
    width: 400px; 
 
} 
 
input { 
 
    display: block; 
 
} 
 
.list { 
 
    display: inline-block; 
 
} 
 
.same { 
 
    color: orange; 
 
} 
 
.yourname { 
 
    color: blue; 
 
} 
 
.peersname { 
 
    color: brown; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<h1>Get a random match </h1> 
 
<p>Insert all your names into the textarea below. Each name should be on a new line. Hit the button to generate your matches.</p> 
 
<form> 
 
    <textarea id="names" placeholder="Enter list of names here. Each name should be on a new line."></textarea> 
 
    <input type="button" id="ranGen" value="Go" onClick="JavaScript:randomize()" /> 
 
</form> 
 

 
<div id="list" class="list"></div> 
 
<div id="randomlist" class="list"></div> 
 
<div id="combined" class="list"></div>

+1

你可以添加** **最小必要的代碼重現該問題。 – Tushar

+0

使用1,2,3,4,5,6在文本框中的單獨行 – mcadamsjustin

+0

@DannyFardy我無法批准您的編輯,但是工作。不知道如何讓它回來。謝謝! – mcadamsjustin

回答

2

過濾掉 「空」 行應該解決這個問題

var lines = $('#names').val().split(/\n/).filter(function (val) { 
    return val.trim() != ''; 
});