2 votes

Trouver un objet entier dans un tableau d'objets

Comment puis-je trouver Array2 sur Array1 . J'ai utilisé $.inArray() ou indexOf() mais il renvoie faux alors que la déclaration est vraie.

var array1 = [{
    h: 1480508328,
    rid: 16,
    sid: 2
  }, {
    h: 87542,
    rid: 18,
    sid: 9
  }
];
var array2 = {
  h: 1480508328,
  rid: 16,
  sid: 2
};
//test if array2 exist in array1
if ($.inArray(array2, array1) > 0) {
  console.log('Object is in array');
} else {
  console.log('Object is not in array');
}

Aidez-nous. Merci de votre aide.

4voto

Nina Scholz Points 17120

Vous pourriez itérer le tableau et vérifier la longueur des propriétés avec la longueur de l'objet donné et vérifier chaque valeur.

var array = [{ h: 1480508328, rid: 16, sid: 2 }, { h: 87542, rid: 18, sid: 9 }],
    object = { h: 1480508328, rid: 16, sid: 2 },
    found = array.some(function (a) {
        var keys = Object.keys(a);
        return keys.length === Object.keys(object).length && keys.every(function (k) {
            return a[k] === object[k];
        });
    });

console.log(found);

var array = [{ h: 87542, rid: 18, sid: 9 }, { h: 1480508328, rid: 16, sid: 2 }],
    object = { h: 1480508328, rid: 16, sid: 2 },
    found = array.some(function (a) {
        var keys = Object.keys(a);
        return keys.length === Object.keys(object).length && keys.every(function (k) {
            return a[k] === object[k];
        });
    });

console.log(found);

3voto

kukkuz Points 24428

Utilisez Array.prototype.every pour vérifier si chaque de l'objet du tableau et l'objet correspond - utilisez maintenant Array.prototype.some pour vérifier si l'objet existe au moins une fois dans le tableau.

Voir la démo ci-dessous :

var array1=[{h:1480508328,rid:16,sid:2},{h:87542,rid:18,sid:9}];
var object={h:1480508328,rid:16,sid:2}

var result = array1.some(function(e){
  return Object.keys(object).length === Object.keys(e).length && Object.keys(e).every(function(k){
    return k in object && e[k] === object[k];
  });
});

console.log(result);

1voto

brk Points 23303

Vous pouvez le vérifier par stringification et vérifier l'égalité

var array1 = [{
    h: 1480508328,
    rid: 16,
    sid: 2
  }, {
    h: 87542,
    rid: 18,
    sid: 9
  }
];
var array2 = {
  h: 1480508328,
  rid: 16,
  sid: 2
};

var dat1 = JSON.stringify(array2);
array1.forEach(function(item){
    if(JSON.stringify(item) === dat1){
        console.log(dat1)
    } else {
        console.log('Not match')
    }
});

JSFIDDLE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X