Comment puis-je tranche un tableau à partir d'un tableau de littéraux d'objet?
J'ai ce tableau, dans lequel chaque index contient un objet littéral. Tous les objets littéraux ont les mêmes propriétés. Certains objets littéraux ont la même valeur pour une propriété donnée, et je veux créer un nouveau tableau contenant seulement ces objets littéraux.
Mon idée est de trier le tableau, et coupez-le en tranches dans un nouveau tableau...
Voici le tableau:
var arr = [];
arr[0] =
{
country: "United States",
num: 27
};
arr[1] =
{
country: "Australia",
num: 5
};
arr[2] =
{
country: "United States",
num: 7
};
Donc, je veux créer un nouveau tableau contenant uniquement les objets où la propriété country
est "États-unis". C'est mon idée folle jusqu'à présent, qui ne fonctionne pas:
function getNewArray(arr)
{
var arr2 = [];
for(var key in arr)
{
for(var i = 0; i < arr.length - 1; i++)
{
if(arr.hasOwnProperty(key) && arr[i].name == arr[i + 1].name)
{
arr2[i] = arr.slice(key);
}
}
}
return arr2;
}
var arr3 = getNewArray(arr).sort();
Pourriez-vous préciser votre question: votre exemple avec les "États-unis" donne l'impression que vous voulez spécifier un pays et de ne renvoyer que les éléments avec ce pays, mais votre premier paragraphe semble dire le résultat devrait inclure tous les pays qui ont des doublons. Certaines réponses ont disparu d'une façon, les autres (et j'ai mis à jour ma réponse à couvrir à la fois). Peut-être que vous pourriez mettre à jour votre exemple de tableau pour inclure plus de deux pays?
Je suis désolé, je suis en train d'essayer de retourner un tableau qui ne contient que des valeurs correspondantes. Et plus récemment, il s'avère que j'ai besoin d'un tel algorithme qui retourne plusieurs tableaux à partir d'un tableau, chaque tableau contenant uniquement les valeurs correspondantes spécifié..
Je suis désolé, je suis en train d'essayer de retourner un tableau qui ne contient que des valeurs correspondantes. Et plus récemment, il s'avère que j'ai besoin d'un tel algorithme qui retourne plusieurs tableaux à partir d'un tableau, chaque tableau contenant uniquement les valeurs correspondantes spécifié..
OriginalL'auteur Ian Campbell | 2012-05-31
Vous devez vous connecter pour publier un commentaire.
Démo: http://jsfiddle.net/YwytD/1/
Où avez-arr venir ?
OriginalL'auteur elclanrs
C'est exactement ce que le
Array.filtre()
méthode est pour:Noter que le
.filter()
méthode n'est pas disponible dans internet explorer avant la version 9, mais le MDN page, j'ai lié ci-dessus vous montre exactement comment la mettre en œuvre afin de lire cette page devrait en lui-même répondre à votre question.Note également que, dans la (non-travail) du code de la question, vos deux
for
boucles sont essentiellement faire la même chose que les autres car ils sont à la fois une itération surarr
, de sorte qu'il n'est pas judicieux de les imbriquer comme ça. Vous ne devriez pas utiliser une boucle for..in sur un tableau, mais si vous ne lekey
valeurs seront les indices numériques, il n'est pas en quelque sorte ramasser les propriétés de l'objet stocké à chaque index.EDIT:
OK, re-lecture de ce que je suppose que vous n'avez pas vraiment envie de sélectionner des éléments en spécifiant un pays, que vous vouliez sélectionner des éléments pour un pays qui avait des doublons? Donc, si, il y en avait trois éléments qui avaient tous la "Nouvelle-Zélande" vous voulez sélectionner en outre pour les "États-unis"? Si oui, vous pourriez faire quelque chose comme ceci:
OriginalL'auteur nnnnnn
Il y a un moyen plus simple de le faire, je pense que c'est ce que vous voulez
var new_arr = arr.filter(function(obj){ return obj['country'] === 'United States'; })
Cela permettra de filtrer vos résultats en new_arr
Bien sûr, vous pouvez l'améliorer et le rendre plus générique que juste " des États-unis
Edit:
Oups, suis à votre question, il suffit maintenant
Réponse: Filtres Imbriqués 🙂
.filter()
n'est pas malheureusement (IE sucks!).Thx 🙂 ce commentaire fait ma journée
OriginalL'auteur Rishi Diwan
Voici ma solution:
OriginalL'auteur ziad-saab
Pouvez-vous utiliser JQuery?
.grep()
méthode?hmm..très agréable.
Grâce nnnnnn et @Itiong_sh pour le jQuery options -- ces deux sont ce que je cherchais, et sont compatibles avec les navigateurs. J'ai peut effectivement finir par l'utilisation d'un tel jQuery algorithme à la fin, mais la réponse précédente m'a aidé à travailler sur ma logique.
OriginalL'auteur ltiong_sh
voici un exemple de travail
http://jsfiddle.net/michaelghayes/UyHYz/2/
if (arr[i][key] === value)
, et vous avez probablement destiné à pousserarr[i]
. Actuellement, votre code n'utilise jamaisi
dans la boucle...Merci, était un peu pressé, il fixe
Celui-ci est très similaire à
elclanrs
's solution, elle est simple et efficace. Cependant, c'est un peu plus complexe dans la mesure où il y a deux paramètres supplémentaires dekey
etvalue
que je ne pense pas que j'aurais besoin dans la plupart des circonstances.OriginalL'auteur MiGnH