J'ai le code suivant qui compare Array1 à Array2 afin de déterminer si Array1 manque une valeur de Array2: Ce qui précède ne fonctionne pas toujours. Voir ci-dessous graphique pour scénarios et résultats VS Résultats attendus: P> var array1 = ['bob', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
var array1 = ['bob', 'frank'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
var array1 = ['frank', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
var array1 = ['frank', 'bob', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:false, expected: false
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank']; // result:false, expected: true
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank', 'janet']; // result:false, expected: true
var array1 = ['frank', 'george'];
var array2 = ['frank', 'frank']; // result: false, expected: true
5 Réponses :
function missing(array1, array2) {
const copy = array1.slice()
return array2.some(element => {
const index = copy.indexOf(element)
if(index >= 0) copy.splice(index, 1);
return index < 0
})
}
var array1 = ['bob', 'george'];
var array2 = ['bob', 'george', 'frank'];
console.log(missing(array1, array2))
var array1 = ['bob', 'frank'];
var array2 = ['bob', 'george', 'frank'];
console.log(missing(array1, array2))
var array1 = ['frank', 'george'];
var array2 = ['bob', 'george', 'frank'];
console.log(missing(array1, array2))
var array1 = ['frank', 'bob', 'george'];
var array2 = ['bob', 'george', 'frank'];
console.log(missing(array1, array2))
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank'];
console.log(missing(array1, array2))
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank', 'janet'];
console.log(missing(array1, array2))
var array1 = ['frank', 'george'];
var array2 = ['frank', 'frank'];
console.log(missing(array1, array2))@Sweepster Scénario 5 Misses 'Bob'
Si le tableau 1 contient 'Frank', 'George' et Array2 contiennent "Frank", le résultat attendu "Frank 'devrait être vrai. Je deviens faux.
Vous avez répondu devant moi cependant, s'il s'agit de la bonne réponse, le vôtre devrait être accepté
mais le 2e Frank in Array 2 est absent de la graphique 1, le résultat devrait donc être vrai
@Sweepster vérifier
Trouvez le premier élément dans la deuxième matrice et retirez-le.
function missing(a,b) {
let coppied = [...b];
a.forEach(el => {
const index = coppied.indexOf(el);
if (index != -1) {
coppied.splice(index, 1);
}
});
return !!coppied.length; //If not empty return true
}
Cela n'aide pas quand il y a des valeurs répétées. Si un tableau a deux de la même valeur, la seconde devrait également avoir 2 ...
Vérifiez-le maintenant.
Utilisez Array.Prototype.Some et Array.Prototype.indexof . Make une copie du premier tableau, puis itérer sur les éléments du deuxième réseau et trouvez l'élément dans la première matrice, s'il est trouvé, retirez-le afin que cela ne soit pas compté deux fois. p> p> const missing = (arr1, arr2) => {
const left = [...arr1];
return arr2.some(x => {
const idx = left.indexOf(x);
if (idx >= 0) left.splice(idx, 1);
return idx < 0;
});
}
console.log(missing(['bob', 'george'], ['bob', 'george', 'frank'])); // true
console.log(missing(['bob', 'frank'], ['bob', 'george', 'frank'])); // true
console.log(missing(['frank', 'george'], ['bob', 'george', 'frank'])); // true
console.log(missing(['frank', 'bob', 'george'], ['bob', 'george', 'frank'])); // false
console.log(missing(['frank', 'george', 'sue', 'frank'], ['bob', 'george', 'frank'])); // true
console.log(missing(['frank', 'george', 'sue', 'frank'], ['bob', 'george', 'frank', 'janet'])); // true
console.log(missing(['frank', 'george'], ['frank', 'frank'])); // false
@Sweepster, je vois que vous avez mis à jour votre question, ma réponse devrait fonctionner
@JO_VA Nos réponses sont les mêmes
Si le tableau 1 contient 'Frank', 'George' et Array2 contiennent "Frank", "Frank '," Frank' Résultat devrait être vrai car le 2e Frank manque dans la matrice 1. Je deviens faux.
@Sweepster ok, attends
@jo_va tu rigoles? Ah ah
@ALexowl, haha, pas du tout, je viens de voir que vous avez mis à jour votre code lorsque vous avez posté ce commentaire
@jo_va est-ce que ça va d'épisser (-1, 1)?
@Alexowl, je pense que vous connaissez la réponse, non ce n'est pas le cas, haha, il va supprimer à la fin
@Jo_VA Essayez d'exécuter votre extrait, vous avez cassé quelque chose
@Anexown, eh bien, j'ai foiré en effet!
function missing(a,b){
//remove duplicated elements
var aa=a.filter(function(elem, index, self) {return index ===self.indexOf(elem);});
var bb=b.filter(function(elem, index, self) {return index ===self.indexOf(elem);});
//put in aa the longest array
if(aa.length<bb.length){
var tmp=aa;
aa=bb;
bb=tmp;
}
var result=false;
//search for an aa's element not in bb
aa.forEach(el=>{
if(bb.indexOf(el)<0){
result=true;
return;
}
});
return result;
}
var array1 = ['bob', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
console.log(missing(array2, array1));
var array1 = ['bob', 'frank'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
console.log(missing(array2, array1));
var array1 = ['frank', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:true, expected: true
console.log(missing(array2, array1));
var array1 = ['frank', 'bob', 'george'];
var array2 = ['bob', 'george', 'frank']; // result:false, expected: false
console.log(missing(array2, array1));
var array1 = ['frank', 'george', 'sue', 'frank'];
var array2 = ['bob', 'george', 'frank']; // result:false, expected: true
console.log(missing(array2, array1));
array1 = ['frank', 'george', 'sue', 'frank'];
array2 = ['bob', 'george', 'frank', 'janet']; // result:false, expected:true
console.log(missing(array2, array1));J'avais du mal à comprendre comment vous vouliez que le deuxième dernier test soit faux, mais on dirait que vous l'avez mis à jour
p>
console.log(missing(['bob', 'george'], ['bob', 'george', 'frank']) === true);
console.log(missing(['bob', 'frank'], ['bob', 'george', 'frank']) === true);
console.log(missing(['frank', 'george'], ['bob', 'george', 'frank']) === true);
console.log(missing(['frank', 'bob', 'george'], ['bob', 'george', 'frank']) === false);
console.log(missing(['frank', 'george', 'sue', 'frank'], ['bob', 'george', 'frank']) === true);
console.log(missing(['frank', 'george', 'sue', 'frank'], ['bob', 'george', 'frank', 'janet']) === true);
console.log(missing(['frank', 'george'], ['frank', 'frank']) === true);
function missing(a, b) {
var c = [].concat(a); // non-destructive
for (var i = 0; i < b.length; i++) {
var iO = c.indexOf(b[i]);
if (iO < 0) {
return true;
}
c.splice(iO, 1)
}
return false;
}Yah, désolé pour ça.
Si le tableau 1 contient "Frank", "George" et Array2 contient "Frank", "Frank", le résultat attendu devrait être vrai car le 2e Frank est manquant. Je deviens faux.
OK, cela change un peu les choses, car cela signifie que vous devez garder le nombre d'articles manquants
@Certeperformance Parce que si quelque chose manque, cela devrait dire vrai, pas faux, comme c'est le cas dans tous les autres exemples.