Je pratique/étudie à la fois JavaScript et Python. Je me demande si Javascript a l'équivalent de ce type de codage.
J'essaie essentiellement d'obtenir un tableau de chaque entier individuel de la chaîne à des fins de pratique. Je suis plus compétent en Python qu'en JavaScript
Python:
string = '1234-5'
forbidden = '-'
print([int(i) for i in str(string) if i not in forbidden])
Javascript a-t-il quelque chose de similaire à faire ci-dessus?
Mise à jour: Les compréhensions de tableaux ont été supprimées de la norme. Citant MDN :
La syntaxe de compréhension de tableau est non standard et a été supprimée à partir de Firefox 58. Pour les utilisations futures, envisagez d'utiliser Array.prototype.map, Array.prototype.filter, les fonctions de flèche et la syntaxe de propagation.
Réponse originale:
Oui, JavaScript prendra en charge la compréhension des tableaux dans la prochaine version d'EcmaScript 7: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Array_comprehensions .
Voici un exemple: Array Comprehensions .
var str = "1234-5";
var ignore = "-";
console.log([for (i of str) if (!ignore.includes(i)) i]);
En lisant le code, je suppose qu’interdit peut avoir plus d’un caractère. Je suppose également que la sortie devrait être "12345"
var string = "12=34-5";
var forbidden = "=-";
console.log(string.split("").filter(function(str){
return forbidden.indexOf(str) < 0;
}).join(""))
Si la sortie est "1" "2" "3" "4" "5" sur des lignes séparées
var string = "12=34-5";
var forbidden = "=-";
string.split("").forEach(function(str){
if (forbidden.indexOf(str) < 0) {
console.log(str);
}
});
Pas directement, mais ce n'est pas difficile à reproduire.
var string = "1234-5";
var forbidden = "-";
string.split("").filter(function(str){
if(forbidden.indexOf(str) < 0) {
return str;
}
}).forEach(function(letter) { console.log(letter);});
Je suppose plus directement:
for(var i=0 ; i < str.length ; i++) {
if(forbidden.indexOf(str) < 0) {
console.log(str[i]);
}
}
Mais il n'y a pas de moyen intégré pour filtrer dans votre boucle for.
Vous pouvez facilement obtenir ce comportement en utilisant un foncteur d’application.
Array.prototype.ap = function(xs) {
return this.reduce((acc, f) => acc.concat(xs.map(f)), [])
}
const result = [x => x +1].ap([2])
console.log(result)
Pour "compléter", voici une version plus courte de l'expression rationnelle.
var str = "1234-5";
var ignore = "-=";
console.log(str.replace(new RegExp(ignore.split("").join("|")), "").split(""));
EDIT: Pour être sûr que RegExp ne "s'étouffe" pas sur des caractères spéciaux, ignore
peut être implémenté comme littéral regexp, au lieu d'une chaîne:
var str = "1234-5";
var ignore = /[\+=-]/;
console.log(str.replace(ignore, "").split(""));
JavaScript ne prend plus en charge les compréhensions de tableaux.
Moi aussi, je cherchais l'équivalent JavaScript. Le réseau du développeur Mozilla indique que cette fonctionnalité n'est plus prise en charge. La syntaxe préférée est référencée dans le lien susmentionné.
Étant donné le code Python de la question
print([int(i) for i in str(string) if i not in forbidden])
c'est la plus traduction directe en JavaScript (ES2015):
const string = '1234-5';
const forbidden = '-';
console.log([...string].filter(c => !forbidden.includes(c)).map(c => parseInt(c)));
// result: [ 1, 2, 3, 4, 5 ]
Voici une comparaison des éléments de code Python et JavaScript utilisés: (Python -> Javascript):
Array.filter
Array.map
Il a une mauvaise version de l'homme
const string = '1234-5'
const forbidden = '-'
print([int(i) for i in str(string) if i not in forbidden])
const result = string.split('').filter(char => char !== forbidden);
console.log(result)
Dans JS, vous ne pouvez effectuer une itération que sur des éléments uniques d'un tableau. Par conséquent, aucune extraction de plusieurs entrées à la fois, comme en Python.
Dans ce cas particulier, vous devez utiliser un RegExp pour filtrer la chaîne.