Подтвердить что ты не робот

Поддерживает ли 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 что-то подобное для меня, чтобы сделать выше?

4b9b3361

Ответ 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 ]

Ответ 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 для фильтрации строки.