订购问题 - 在Javascript中索引多维数组

时间:2015-03-24 22:16:01

标签: javascript jquery

请您看一下下面的演示让我知道如何根据项目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 3取消选中mItem 3,但是如果您先取消选中mItem 1并再次检查它,则会覆盖该数组中的mitem2集会!)

能告诉我如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我不明白这样一个申请的目的,但如果我理解你的情况,这就是原因。

最初数组是[“D”,“E”]。

检查mItem3时,它变为[“D”,“E”,“”,“mItem3”]。 JS在索引2处添加一个空项,因为您在索引3处插入。

取消选中mItem3时,数组becoms [“D”,“E”,“”]。

检查mItem2,然后检查[“D”,“E”,“mItem2”]。

检查mItem1,然后它将替换索引1处的元素 - &gt; [“D”,“mItem1”,“mItem2”]。

取消选中mItem1将删除mItem1(在索引1处) - &gt; [“D”,“mItem2”]。

我想,现在一切都好了。

这里出现了问题。

当你再次检查mItem1时,它会替换索引1处的值为“mItem2”的项目。因此,数组自然变为[“D”,“mItem1”]。