Лучший способ искать дубликаты - PullRequest
0 голосов
/ 19 сентября 2018

Я много работаю с кендогридом и у меня есть кендогрид с выпадающим списком.Есть четыре строки, и мне нужно проверить, что ни одна из строк не выбрала то же значение, что и любая другая строка.Я делаю это так:

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 голосов
/ 25 сентября 2018
  • Чтобы заставить его работать динамически для любого нет.опций, сохраняйте счет каждой выбранной опции (используйте объект с парой ключ-значение, где ключ - это опция, а значение - это ее счет).
  • В конце переберите каждый ключ объекта и проверьте его значение,Если оно больше 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;
...