查找重复项的更好方法

时间:2018-09-19 08:34:47

标签: .net compare kendo-grid

我正在与kendogrid一起工作很多,有一个带有下拉菜单的kendogrid。有四行,我需要确认没有任何行选择与其他任何行相同的值。我正在这样做:

var pj = 0; var ga = 0; var gt = 0; var empty = 0;
    var existingValues = _.filter($("#configSettingsGrid").data().kendoGrid.dataSource.data(), function (config) {
        if (config.Enabled === true) {
            if (config.selectedJackpotType === "Progressive jackpot") {
                pj++
            }
            if (config.selectedJackpotType === "Guaranteed amount") {
                ga++
            }
            if (config.selectedJackpotType === "Guaranteed time") {
                gt++
            }
            if (config.selectedJackpotType === "") {
                empty++
            }
        }
    });
    if (pj > 1 || ga > 1 || gt > 1 || empty > 0) {
        return false;
    }

之所以有效,是因为U知道用户可以在这些值之间进行选择,但是我真的很想拥有一个更动态的解决方案,如果将来使用新的可选值类型,验证也可以处理。任何人都有比较这些值的好方法。

1 个答案:

答案 0 :(得分:0)

  • 要使它动态地工作,不行。选项中,对每个选定选项进行计数(使用具有键值对的对象,其中键为选项,值为计数)。
  • 最后,遍历每个对象键并检查其值。如果大于1,则返回false,否则返回true。在下面的代码中,我假设一切都在函数或闭包内部。

代码:

var hash = {};
_.filter($("#configSettingsGrid").data().kendoGrid.dataSource.data(), function (config) {
    if (config.Enabled === true) {
        hash[config.selectedJackpotType] = hash[config.selectedJackpotType] === undefined ? 1 : hash[config.selectedJackpotType] + 1;
    }
});

var selected_options = Object.keys(hash);

for(let each_option in selected_options){
    if(hash[selected_options[each_option]] > 1){
        return false;
    }
}

return true;