J'ai un tableau d'éléments (terms)
, qui seront mis en <option>
balises dans un <select>
Si l'un de ces éléments se trouvent dans un autre tableau (termsAlreadyTaking
), ils doivent d'abord enlever Voici comment je l'ai fait:..Une meilleure façon de voir si un tableau contient un objet?
// If the user has a term like "Fall 2010" already selected, we don't need that in the list of terms to add.
for (var i = 0; i < terms.length; i++)
{
for (var iAlreadyTaking = 0; iAlreadyTaking < termsAlreadyTaking.length; iAlreadyTaking++)
{
if (terms[i]['pk'] == termsAlreadyTaking[iAlreadyTaking]['pk'])
{
terms.splice(i, 1); // remove terms[i] without leaving a hole in the array
continue;
}
}
}
est-il une meilleure façon de le faire? il se sent un peu maladroit.
J'utilise jQuery, si cela fait une différence.
MISE à JOUR sur la base de la réponse de @Matthew Flaschen :
// If the user has a term like "Fall 2010" already selected, we don't need that in the list of terms to add.
var options_for_selector = $.grep(all_possible_choices, function(elem)
{
var already_chosen = false;
$.each(response_chosen_items, function(index, chosen_elem)
{
if (chosen_elem['pk'] == elem['pk'])
{
already_chosen = true;
return;
}
});
return ! already_chosen;
});
La raison pour laquelle il obtient au milieu un peu plus bavard est que $.inArray()
est soit faux, parce que les doublons que je cherche ne pas strictement égal à un autre dans le sens ==
. Cependant, toutes leurs valeurs sont les mêmes. Puis-je le rendre plus concis?
'splice' est pas exactement rapide. Il pourrait être préférable d'ajouter les éléments choisis à un nouveau tableau au lieu de supprimer le reste de l'original. – casablanca