Frage

Ich habe diese Frage zuvor als JQuery/JavaScript: Arrays - veröffentlicht - JQuery/JavaScript: Arrays. Aber da ich ein vollständiger Anfänger bin, habe ich die Frage falsch formuliert und die Antworten auch nicht verstanden .... :(

Nachdem ich die angegebenen Lösungen nicht implementiert hatte, schaute ich mir um, dass ich 6 Arrays möglicher Auswahlmöglichkeiten vergleichen und sie endgültig nur die überlappenden Werte überschneiden musste.

Dies ist also eine klarere Formulierung:

Ich habe 6 Fragen/6 Gruppen von Optionsfeldern für Antworten. Jede Antwort hat mehrere Werte (sie können zwischen 1 und 38 Elementen reichen, die in den letzten "Rat" angezeigt werden können). Ich sammle die Werte von überprüften Radios in Arrays. Ich bekomme 6 Arrays.

Wie kreuze ich 6 Arrays, um ein endgültiges Array zu erhalten, das nur überschneidende Werte enthält, die alle 6 Auswahlmöglichkeiten bilden? Wie verwandle ich Elemente dieses endgültigen Arrays in Selektoren?

Kann mir bitte jemand helfen? Vielen Dank!

Mein Skript sieht jetzt aus wie:

(function($){
  $.fn.checkboxval = function(){
      var outArr = [];
      this.filter(':checked').each(function(){
            outArr.push(this.getAttribute("value"));
      });
      return outArr;
  };
})
(jQuery);
$(function(){
  $('#link').click(function(){
    var valArr1 = $('#vraag1 input:radio:checked').checkboxval();
    var valArr2 = $('#vraag2 input:radio:checked').checkboxval();
    var valArr3 = $('#vraag3 input:radio:checked').checkboxval();
    var valArr4 = $('#vraag4 input:radio:checked').checkboxval();
    var valArr5 = $('#vraag5 input:radio:checked').checkboxval();
    var valArr6 = $('#vraag6 input:radio:checked').checkboxval();
// var newArray = $.merge(valArr1, valArr2, valArr3, valArr4, valArr5, valArr6); <- test to see if I can merge them
// $('#output').text(newArray.join(',')); <- test to see if I can join them
//$("#output").html($("#output").html().replace(/,/gi, ',#diet')); <- test to see if I can append text so it looks like the selectors of divs I need to display later
//    return false;
  });
});

Meine Form/Eingänge sehen aus wie:

<input name="vraag1" type="radio" value="1a,4,5,12,13,17a,18,19,22,23,24,26,27,28,29,30,33,38,6" class="radio advice" id="vraag1-0" /><label for="vraag1-0">ja</label>
<br />
<input name="vraag1" type="radio" value="1b,1,2,3,7,8,11,9,14,15,16,17,20,21,25,31,34,35,36,37,10,32" class="radio advice" id="vraag1-1" /><label for="vraag1-1">nee</label>
<br />
<input name="vraag1" type="radio" value="1c,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,17a,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38" class="radio advice" id="vraag1-2" /><label for="vraag1-2">maakt mij niet uit</label>
War es hilfreich?

Lösung

Ihre Frage ist für mich immer noch sehr verwirrend.

Aber es scheint, dass Sie den Wert aus den Eingaben erhalten und versuchen, sie zu kombinieren. Aber sie sind alle Saiten, keine Arrays.

Versuchen Sie einfach, die Saiten zusammen hinzuzufügen, und brechen Sie sie dann mit dem mit split() (Demo)

$('#link').click(function() {
    var radios = '';
    $('input:radio:checked').each(function() {
        radios += $(this).val() + ',';
    })
    // remove last comma & convert to array
    radios = radios.substring(0, radios.length - 1).split(',');
    // do something with the array
    console.debug(radios);
})

UPDATE: OK, von Ihrer Demo HTML konnte ich nicht 6 Duplikate bekommen, also habe ich in der Demo es festgelegt, um 3+ Übereinstimmungen zu finden. Ich musste dieses Skript schreiben, um Duplikate in einem Array zu finden. Ich habe es auch geschafft, ein assoziatives Objekt mit der Anzahl der Duplikate zurückzugeben. Es mag eine bessere Methode geben, aber das habe ich mir ausgedacht ((Aktualisierte Demo):

$(function() {
    $('#link').click(function() {
        var radios = '';
        $('input:radio:checked').each(function() {
            radios += $(this).val() + ',';
        })
        // remove last comma & convert to array
        var results = [],
            dupes = radios
             .substring(0, radios.length - 1)
             .split(',')
             .getDuplicates(),
            arr = dupes[0],
            arrobj = dupes[1],
            minimumDuplicates = 6; // Change this to set minimum # of dupes to find

        // find duplicates with the minimum # required
        for (var i=0; i < arr.length; i++){
            if ( arrobj[arr[i]] >= minimumDuplicates ){
                results.push(arr[i]);
            }
        }

        // Show id of results
        var diets = $.map(results, function(n,i){ return '#diet' + n; }).join(',');
        $(diets).show(); // you can also slideDown() or fadeIn() here
    })
});


/* Find & return only duplicates from an Array
 * also returned is an object with the # of duplicates found
 * myArray = ["ccc", "aaa", "bbb", "aaa", "aaa", "aaa", "aaa", "bbb"];
 * x = myArray.getDuplicates();
 * // x = [ array of duplicates, associative object with # found]
 * // x = [ ['aaa','bbb'] , { 'aaa' : 5, 'bbb' : 2 } ]
 * alert(x[0]) // x[0] = ['aaa','bbb'] & alerts aaa,bbb
 * alert(x[1]['aaa']) // alerts 5;
 */
Array.prototype.getDuplicates = function(sort) {
    var u = {}, a = [], b = {}, c, i, l = this.length;
    for (i = 0; i < l; ++i) {
        c = this[i];
        if (c in u) {
            if (c in b) { b[c] += 1; } else { a.push(c); b[c] = 2; }
        }
        u[c] = 1;
    }
    // return array and associative array with # found
    return (sort) ? [a.sort(), b] : [a, b];
}

Andere Tipps

Mit JQuery geladen können Sie die Konsole in die Konsole schlagen:

a1=[1,2,3]
a2=[2,3,4,5]
$.map(a1,function(a){return $.inArray(a, a2) < 0 ? null : a;})

Die Ausgabe sollte sein:

[2, 3]

Ich habe mich nur dasselbe gefragt und sich darauf ausgedacht:

$(["a","b"]).filter(["a","c"])

kehrt zurück

["a"]

Wenn Sie in Arrays einen Schnittvorgang durchführen möchten, können Sie das JQuery -Plugin verwenden JQuery Array -Dienstprogramme

Hier ist eine Beispiel -Codezeile, wie Sie es verwenden:

$.intersect([1, 2, 2, 3], [2, 3, 4, 5, 5])

wird das Ergebnis zurückgeben [2,3

Sehen Der einfachste Code für die Array -Intersektion in JavaScript Für eine Kreuzungsfunktion. Teilen Sie die Saiten mit Split (",") und führen Sie eine Kreuzung auf den resultierenden Strings -Arrays durch.

function intersect(a, b) {
    var aIsShorter = a.length < b.length;
    var shorter = aIsShorter ? a : b;
    var longer = aIsShorter ? b : a;

    return longer.filter(isFoundInOther).filter(isFoundOnce);

    function isFoundInOther(e) {
        return shorter.indexOf(e) !== -1;
    }

    function isFoundOnce(element, index, array) {
        return array.indexOf(element) === index;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top