GOOGLE ADS

samedi 23 avril 2022

Comment exécuter une fonction deux fois et enregistrer la sortie pour la comparaison ?

J'ai créé une fonction qui compare deux tableaux et s'assure qu'ils ne sont pas égaux l'un à l'autre. J'exécute la fonction deux fois mais je dois admettre que c'est une très mauvaise conception, cependant, c'était la seule façon de la faire fonctionner. Existe-t-il un moyen plus simple d'accomplir la même chose? Peut-être un clonage profond avec lodash? Voici ma façon de faire.

let callCount = 0;
let values = [];
let values2 = [];
const getData = () => {
const chart = [{ //dynamic: changes the id numbers on second call
items: [{
id: 1,
name: 'foo'
}, {
id: 2,
name: 'bar'
}, {
id: 3,
name: 'bar'
}, {
id: 4,
name: 'bar'
}]
}];
if (callCount < 1) { //if and for block cannot be extracted for various reasons
for (let i = 0; i < 5; i++) {
const arr = chart[i].items[0];
arr.forEach((element) => {
values.push(element.id);
});
}
callCount++;
return values;
}
if (callCount >= 1) {
for (let i = 0; i < 5; i++) {
const arr = chart[i].items[0];
arr.forEach((element) => {
values2.push(element.id);
});
}
expect(values).to.not.eq(values2);
}
};
it ('Comparing two arrays', function () {
getData()
// logic that will change effectively change some of the values of `chart`
getData()
// is successful but wildly inefficient
}

Existe-t-il un moyen plus simple d'utiliser Javascript pour faire la même chose sans compter le nombre de fois que la fonction est appelée et exécuter à nouveau la même chose ?


Solution du problème

Renvoie le tableau à chaque fois et compare à la fin de la séquence,

const getData = () => {
const chart = [{ //dynamic: changes the id numbers on second call
items: [{
id: 1,
name: 'foo'
}, {
id: 2,
name: 'bar'
}, {
id: 3,
name: 'bar'
}, {
id: 4,
name: 'bar'
}]
}];
const arr = chart[i].items[0].map(element => element.id)
return arr;
};
it ('Comparing two arrays', function () {
const values1 = getData()
// logic that will change effectively change some of the values of `chart`
const values2 = getData()
expect(values1).to.not.eq(values2);
}

Je me demande comment chartest changé - y a-t-il des cy.get()commandes impliquées?

Si c'est le cas, vous devrez en renvoyer le résultat et imbriquer les résultats

it ('Comparing two arrays', function () {
getData().then(values1 => {
// logic that will change effectively change some of the values of `chart`
getData().then(const values2 => {
expect(values1).to.not.eq(values2);
})
})
}

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique&nbsp;?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...