Фильтровать дубликаты параметров из выпадающего меню

У меня есть селектор выпадающего списка, сгенерированный из списка, и вы хотите отфильтровать параметры для удаления повторяющихся записей. например Я хочу фильтровать...

<select name="company">
    <option "1">Microsoft</option>
    <option "2">Microsoft</option>
    <option "3">Microsoft</option>
    <option "4">Microsoft</option>
    <option "5">Apple</option>
    <option "6">Apple</option>
    <option "7">Google</option>
</select>

... вниз, чтобы представить пользователю что-то вроде...

<select name="company">
    <option "1">Microsoft</option>
    <option "5">Apple</option>
    <option "7">Google</option>
</select>

(Данные поступают из Sharepoint Lookup в другом списке, и я думаю, что я могу использовать jquery, чтобы сохранить только уникальные параметры, не вникая в мужество того, что происходит.) Могу ли я удалить такие варианты? Спасибо.

Ответ 1

Вы можете сделать это с помощью простого цикла - может быть более умный способ справиться с этим с помощью селекторов jQuery, которые я не вижу. Должно работать следующее:

var usedNames = {};
$("select[name='company'] > option").each(function () {
    if(usedNames[this.text]) {
        $(this).remove();
    } else {
        usedNames[this.text] = this.value;
    }
});

Изменить: Здесь функциональный стиль с одним слоем, который делает это с помощью отличного Underscore.js, хотя предыдущая версия почти наверняка более эффективна:

_.each(_.uniq(_.pluck($("select[name='company'] > option").get(), 'text')), function(name) { $("select[name='company'] > option:contains(" + name + ")").not(":first").remove(); });

Ответ 2

Вы можете сделать что-то вроде этого:

var previousOption;
$('select[name=company] option').each(function() {
    if (this.text == previousOption) $(this).remove();
    previousOption= this.text;
});

Ответ 3

Вы можете попробовать следующий код, он удалит дубликаты независимо от их положения. Здесь #targetSelect - это целевая раскрывающаяся папка

var a = new Array();
$(#targetSelect).children("option").each(function(x){
test = false;
b = a[x] = $(this).text();
for (i=0;i<a.length-1;i++){
if (b ==a[i]) test =true;
}
if (test) $(this).remove();
});