check select options for duplicates

by Terrance Smith

HTML

<p>Test for dupes</p>
<select name="test">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
</select>
<select name="test">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
</select>
<select name="test">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
</select>
<select name="test">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
</select>
<select name="test">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
</select>
<input type="button" value="test vals" onclick="testMatchingValsSelected();" />

JavaScript

function eliminateDuplicates(arr) {
    var i,
    len = arr.length,
        out = [],
        obj = {};

    for (i = 0; i < len; i++) {
        obj[arr[i]] = 0;
    }
    for (i in obj) {
        out.push(i);
    }
    return out;
}

function HasDupes(arr) {
    var originalLength = arr.length,
        newLength = eliminateDuplicates(arr).length;
    console.log("originalLength =" + originalLength);
    console.log("newLength =" + newLength);
    return originalLength !== newLength;
}

function testHasDupes() {
    var arr = [1, 2, 3, 2];
    assert((HasDupes(arr) === true), "HasDupes Failed");
    console.log("testHasDupes: Passed");
}

function testMatchingValsSelected() {
    var result = HasDupes(getArrayOfSelectedOptionValues("test"));
    if (result) {
        console.log("You have selected duplicate values");
    }
}

function getArrayOfSelectedOptionValues(elementName) {
    var retval = [];
    var selectedVals = document.getElementsByName(elementName);
    for (var i = 0; i < selectedVals.length; i++) {
        retval.push(selectedVals[i].value);
    }
    console.log(retval);
    /*$(selector).each(function (index, val) {
        retval.push(val.value);
    });*/
    return retval;
}

function assert(condition, message) {
    if (!condition) {
        throw message || "Assertion failed";
    }
}