Ceci est mon premier article, j'ai fait des recherches mais je ne suis pas sûr que je pose la question de la bonne façon dans les recherches.Object.keys retournant comme non égal
Je tente de comparer les clés d'un objet aux clés d'un autre objet (c'est pour les algorithmes freeCodeCamp). Mon code est ci-dessous:
function whereAreYou(collection, source) {
var arr = [];
for (var i=0;i<collection.length;i++) {
console.log("Object.keys(source)= " + Object.keys(source));
console.log("Object.keys(collection[" +i + "]))= " + Object.keys(collection[i]));
console.log("collection[" +i + "].hasOwnProperty(Object.keys(source))= " + collection[i].hasOwnProperty(Object.keys(source)));
if (collection[i].hasOwnProperty(Object.keys(source))) {
var prop = Object.keys(source);
console.log("prop=" + prop);
console.log("collection[" +i + "][prop]= " + collection[i][prop]);
console.log("source[prop]= " + source[prop]);
if (collection[i][prop] === source[prop]) {
arr.push(collection[i]);
}
}
}
return arr;
}
Quand il y a plusieurs clés dans l'argument source, les
if (collection[i].hasOwnProperty(Object.keys(source)))
renvoie false même si la collecte [i] ne contient les clés comme ci-dessous.
whereAreYou([{ "a": 1, "b": 2 }, { "a": 1 }, { "a": 1, "b": 2, "c": 2 }], { "a": 1, "b": 2 })
Object.keys(source)= a,b
Object.keys(collection[0]))= a,b
collection[0].hasOwnProperty(Object.keys(source))= false
Object.keys(source)= a,b
Object.keys(collection[1]))= a
collection[1].hasOwnProperty(Object.keys(source))= false
Object.keys(source)= a,b
Object.keys(collection[2]))= a,b,c
collection[2].hasOwnProperty(Object.keys(source))= false
[]
Ma question est pourquoi ne sont pas a, b et a, b égal? Merci pour votre temps!
Merci beaucoup d'avoir pris le temps de m'aider! J'ai trouvé une meilleure façon de résoudre l'algorithme avant de poster ceci, j'imagine que j'aurais dû être plus clair sur cette partie. Je suis en train de comprendre pourquoi la collecte [0] .hasOwnProperty (Object.keys (source)) est égal à faux dans ce qui précède où la collecte [0] et Object.keys (source) sont égales à un, b. – Will
Étant donné que 'OuEsTuMaintenant ([{ "a": 1}, { "a": 1}, { "a": 1, "b": 2}], { "a": 1}) objet. keys (source) = a Object.keys (collection [0])) = a collection [0] .hasOwnProperty (Object.keys (source)) = true Object.keys (source) = a Object.keys (collection [1])) = a collection [1] .hasOwnProperty (Object.keys (source)) = true Object.keys (source) = a Object.keys (collection [2])) = a, b collection [2] .hasOwnProperty (Object.keys (source)) = true [] ' Pourquoi a, b ne renvoie-t-il pas true? – Will