2015-03-24 66 views
1

請你看看下面的演示讓我知道我可以如何強制Javascript將項目推入基於項目ID的數組?關於訂購的問題 - 在Javascript中索引多維數組

var theArray = [ 
 
    ["A", "B", "C"], 
 
    ["D", "E"], 
 
    ["F", "G", "H", "I"], 
 
    ["J"], 
 
    ["K", "L", "M"] 
 
]; 
 
var res = theArray.toString(); 
 

 
$('#textarea').text(res); 
 

 
$("input[name='m1']").change(function() { 
 
    if ($(this).is(':checked')) { 
 
     var id=$(this).attr('id'); 
 
     var selected = $(this).val();   
 
     theArray[1][id] = selected; 
 
     
 
    } else { 
 
     var itemtoRemove = $(this).val(); 
 
    theArray[1].splice($.inArray(itemtoRemove, theArray[1]),1); 
 

 
    } 
 
    var res = theArray.toString(); 
 
$('#textarea').text(res); 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<br /> 
 
<textarea id="textarea" rows="2" cols="100"></textarea> 
 
<br /> 
 
<br /> 
 
<fieldset> 
 
    <legend>Items</legend> 
 
    <input type="checkbox" id="1" name="m1" value="mItem1" />mItem 1 
 
    <br /> 
 
    <input type="checkbox" id="2" name="m1" value="mItem2" />mItem 2 
 
    <br /> 
 
    <input type="checkbox" id="3" name="m1" value="mItem3" />mItem 3 
 
    <br /> 
 
    <br /> 
 
</fieldset>

正如你所看到的例子作品,如果您未檢查從mItem 3mItem 3但如果你取消mItem 1第一,並再次檢查它,它會覆蓋陣列中的mitem2(這使降神!)

你能讓我知道我該如何解決這個問題嗎?

+0

你能解釋你想做什麼?你期望從你的片段中得到什麼? – MQ87 2015-03-24 22:31:05

回答

0

我不明白這樣的應用程序的目的,但如果我正確地理解你的情況,這是原因。最初數組是[「D」,「E」]。

當您檢查mItem3時,它會變成[「D」,「E」,「」,「mItem3」]。 JS在索引2處添加一個空項目,因爲您在索引3處插入。

當您取消選中mItem3時,數組becoms [「D」,「E」,「」]。

檢查mItem2,然後檢查[「D」,「E」,「mItem2」]。

檢查mItem1,然後它將替換索引1 - > [「D」,「mItem1」,「mItem2」]上的元素。

取消選中mItem1將刪除mItem1(在索引1處) - > [「D」,「mItem2」]。

我想,到現在爲止你都可以。

這裏出現問題。

當您再次檢查mItem1時,它會替換值爲「mItem2」的索引1處的項目。所以,數組自然會變成[「D」,「mItem1」]。