Question

Je tition cette question jquery / javascript: tableaux - jquery / javascript: tableaux . Mais depuis que je suis un débutant, j'ai formulé la mauvaise question et ne comprenait pas les réponses soit ....: (

Après avoir échoué à mettre en œuvre les solutions données que j'ai un peu plus regardant autour j'ai découvert que je dois comparer 6 tableaux de choix possibles et les Intersection pour afficher enfin que les valeurs qui se chevauchent.

C'est donc, Hopely, une formulation plus claire:

J'ai 6 questions / 6 groupes de boutons radio pour obtenir des réponses. Chaque réponse a plusieurs valeurs (ils peuvent varier de 1 à 38 éléments à afficher dans la finale des « conseils »). Je collectionne les valeurs des radios contrôlées dans des tableaux. Je reçois 6 tableaux.

Comment puis-je Intersection 6 tableaux afin d'obtenir un tableau final contenant des valeurs qui se croisent seulement forment tous les 6 choix? Comment activer les éléments de ce tableau en finale sélecteurs?

Quelqu'un peut-il s'il vous plaît me aider? Merci!

Mon script ressemble maintenant:

(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;
  });
});

ma forme / entrées ressemble à:

<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>
Était-ce utile?

La solution

Votre question est encore très confus pour moi.

Mais il semble que vous obtenez la valeur des intrants et d'essayer de les combiner. Mais ils sont toutes les chaînes pas de tableaux.

Essayez simplement d'ajouter les chaînes ensemble, puis les briser à l'aide en dehors split() ( démo )

$('#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);
})

Mise à jour: Ok, à partir de votre démo HTML, je ne pouvais pas 6 doublons si dans la démo je l'ai mis pour trouver 3+ matches. Je devais écrire ce script pour trouver des doublons dans un tableau j'ai aussi fait pour renvoyer un objet associatif avec le nombre de doublons. Il peut y avoir une meilleure méthode, mais ce que je suis venu avec ( mise à jour démo ):

$(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];
}

Autres conseils

Avec chargé jQuery, vous pouvez frapper dans la console:

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

La sortie doit être:

[2, 3]

se demandait la même chose et est venu avec ceci:

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

retourne

["a"]

Si yoou voulez ne faire une opération Intersect sur les tableaux que vous pouvez utiliser le tableau jQuery plugin jQuery Utilitaires

Voici une ligne de code exemple de comment l'utiliser:

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

renverra le résultat [2,3]

Voir code intersection pour Simplest tableau en javascript une intersection une fonction. Diviser les cordes avec split ( « ») et faire une intersection sur les tableaux résultant de chaînes.

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;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top