Поддерживает ли JavaScript поддержку массивов/списков, таких как Python?
Я занимаюсь изучением JavaScript и Python. Мне интересно, имеет ли Javascript эквивалентность этого типа кодирования.
В основном я пытаюсь получить массив из каждого отдельного целого из строки для практических целей. Я больше разбираюсь в Python, чем JavaScript
Python:
string = '1234-5'
forbidden = '-'
print([int(i) for i in str(string) if i not in forbidden])
Есть ли у Javascript что-то подобное для меня, чтобы сделать выше?
Ответы
Ответ 1
Обновление: Массивы были удалены из стандарта. Цитировать MDN:
Синтаксис пониманий массивов является нестандартным и удаляется начиная с Firefox 58. Для использования в будущем используйте Array.prototype.map, Array.prototype.filter, функции стрелок и распространенный синтаксис.
Посмотрите этот ответ для примера с Array.prototype.map
fooobar.com/questions/312847/...
let emails = people.map(({ email }) => email);
Оригинальный ответ:
Да, JavaScript будет поддерживать массивы в следующей версии EcmaScript 7: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Array_comprehensions.
Вот пример: Массивы.
var str = "1234-5";
var ignore = "-";
console.log([for (i of str) if (!ignore.includes(i)) i]);
Ответ 2
Чтение кода, я предполагаю, что запрещенный может иметь более 1 символа. Я также предполагаю, что выход должен быть "12345"
var string = "12=34-5";
var forbidden = "=-";
console.log(string.split("").filter(function(str){
return forbidden.indexOf(str) < 0;
}).join(""))
Если на отдельных строках вывод "1" "2" "3" "4" "5"
var string = "12=34-5";
var forbidden = "=-";
string.split("").forEach(function(str){
if (forbidden.indexOf(str) < 0) {
console.log(str);
}
});
Ответ 3
Не напрямую, но это не сложно воспроизвести.
var string = "1234-5";
var forbidden = "-";
string.split("").filter(function(str){
if(forbidden.indexOf(str) < 0) {
return str;
}
}).forEach(function(letter) { console.log(letter);});
Я думаю, более прямо:
for(var i=0 ; i < str.length ; i++) {
if(forbidden.indexOf(str) < 0) {
console.log(str[i]);
}
}
Но нет встроенного способа фильтрации в вашем цикле for.
Ответ 4
Вы можете легко достичь этого поведения с помощью функтора приложения.
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)
Ответ 5
Для "полноты" -составить здесь более короткую версию регулярного выражения.
var str = "1234-5";
var ignore = "-=";
console.log(str.replace(new RegExp(ignore.split("").join("|")), "").split(""));
РЕДАКТИРОВАТЬ. Чтобы убедиться, что RegExp не "задыхается" от специальных символов, ignore
может быть реализован как литерал регулярного выражения, а не строка:
var str = "1234-5";
var ignore = /[\+=-]/;
console.log(str.replace(ignore, "").split(""));
Ответ 6
Учитывая вопрос Код Python
print([int(i) for i in str(string) if i not in forbidden])
это самый прямой перевод на 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 ]
Ответ 7
JavaScript больше не поддерживает массивы.
Я тоже искал эквивалент JavaScript. Mozilla Developer Network указывает, что эта функция больше не поддерживается.
Предпочтительный синтаксис указан в вышеупомянутой ссылке.
Ответ 8
У него есть версия для бедных мужчин
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)
В JS вы можете перебирать только отдельные элементы в массиве, поэтому не извлекайте несколько записей за раз, как в Python.
В этом конкретном случае вы должны использовать RegExp для фильтрации строки.