2015-03-24 56 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”]。