如何删除数组中的重复行ID

时间:2014-11-27 09:18:39

标签: javascript jquery arrays jqgrid

嗨我需要一些数组的帮助,当我向一个数组添加一个项目时我需要首先删除它,否则它会变成一个副本,我已经查看了类似问题的网站,但我找不到正确的方法,我如果在列表中选择了项目,则有一个将项添加到数组的函数。

var updateIdsOfSelectedRows = function (id) {
        var index = $.inArray(id, idsOfSelectedRows);
        var rowData = $("#UnlinkedSamplesTable").getRowData(id);
        var selRowIds = $("#UnlinkedSamplesTable").jqGrid("getGridParam", "selarrrow");

        if ($.inArray(id, selRowIds) >= 0)
        {


            idsOfSelectedRows.push(id); // add the id 
            statusesOfSelectedRows.push(rowData.StatusEnum); // add the status
            sampleIdsOfSelectedRows.push(rowData.SampleId); // ad the sample id
        }
        else
        {
            //else remove
            idsOfSelectedRows.splice(index, 1); // remove id from the list
            statusesOfSelectedRows.splice(index, 1); // remove status from the list
            sampleIdsOfSelectedRows.splice(index, 1); // remove sampleid from the list
        }

    };

使用jQgrid中的选定行构建数组,当用户使用onSelectRow选择行时以及用户在afterSaveCell上编辑单元格时调用更新函数,如下所示。

onSelectRow: function(rowid){
                updateIdsOfSelectedRows(rowid);
            }

afterSaveCell: function (rowid, cellname, value, iRow, iCol) {
                Highlight(rowid, 'SampleId');

                if($.inArray(rowid, idsOfSelectedRows) == 0)
                updateIdsOfSelectedRows(rowid);
            }

所以我的问题是如何在添加新项目之前从数组中删除当前项目以停止重复项。感谢您对此问题的任何帮助。

1 个答案:

答案 0 :(得分:0)

我想通了,我使用inArray(id, idsOfSelectedRows)检查项目是否已经存在于列表中,如下所示。

var updateIdsOfSelectedRows = function (id) {
        var index = $.inArray(id, idsOfSelectedRows);
        var rowData = $("#UnlinkedSamplesTable").getRowData(id);
        var selRowIds = $("#UnlinkedSamplesTable").jqGrid("getGridParam", "selarrrow");
        // Check the row is selected
        if ($.inArray(id, selRowIds) >= 0)
        {
            //Check the row does not already exist in the array and if so remove it - this is necessery to avoid duplicates
            if($.inArray(id, idsOfSelectedRows) > -1)
            {
                idsOfSelectedRows.splice(index, 1); // remove id from the list
                statusesOfSelectedRows.splice(index, 1); // remove status from the list
                sampleIdsOfSelectedRows.splice(index, 1); // remove sampleid from the list
            }
            idsOfSelectedRows.push(id); // add the id 
            statusesOfSelectedRows.push(rowData.StatusEnum);
            sampleIdsOfSelectedRows.push(rowData.SampleId);
        }
        else
        {
            //else remove
            idsOfSelectedRows.splice(index, 1); // remove id from the list
            statusesOfSelectedRows.splice(index, 1); // remove status from the list
            sampleIdsOfSelectedRows.splice(index, 1); // remove sampleid from the list
        }

inArray返回找到的元素的索引,如果索引大于-1,则元素存在且可以删除,-1表示未找到该元素。