如何从网格中构建唯一值列表?

时间:2017-08-24 17:54:26

标签: javascript arrays kendo-grid

我的表单上有2个网格。从第一个网格中选择记录时,它将使用相关记录填充第二个网格。这个二级网格有一个" PEERGROUP"列,并包含" 1"," 2"等值。

我需要确保用户选择了至少1个属于每个组的记录。

我一直试图建立一个包含唯一组ID值的列表:

function CheckSelectionForGroups(gridName)
{
    //Get rows in grid
    var view = $('#' + gridName).data('kendoGrid').dataSource.view();

    //Array to store the all distinct groups in the grid
    var listOfGroups = [];
    var listIndex = 0;

    //Loop over the rows in the grid
    for (var i = 0; i < view.length; i++)
    {
        //If the group is found in our list already, do nothing
        if (listOfGroups[view[i].PEERGROUP])
            continue;

        //If the group was not found in our list, add it to the list.
        listOfGroups[listIndex] = view[i].PEERGROUP;
        listIndex = listIndex + 1;
    }

    //TODO - Loop over user selection 
    //    and compare groups against list of groups
}

以下是一些值的屏幕截图:

enter image description here

(注意:数组不完整,因为如果我在处理完下一行后截取屏幕截图,则会错误地包含3个值:"1""1""2")< / p>

因此,在这种情况下,我希望listOfGroups仅包含值"1""2"。我的if循环中的for语句永远不会计算为true。我怀疑 Javascript正在向"1"投射1,并且正在尝试从索引listOfGroups的{​​{1}}中提取元素。但我不知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用对象收集ID,然后使用Object.keys获取这些ID的数组:

var dummyObject = {};
for (var i = 0; i < view.length; i++) {
    dummyObject[view[i].PEERGROUP] = 0;
}
var listOfGroups = Object.keys(dummyObject);