JavaScript是否支持Python之类的数组/列表推导?

时间:2015-07-11 03:49:30

标签: javascript python

我正在练习/学习JavaScript和Python。我想知道Javascript是否与这种类型的编码等效。

我基本上试图从字符串中的每个单独的整数中获取一个数组用于练习目的。我比Python更擅长Python

的Python:

string = '1234-5'

forbidden = '-'

print([int(i) for i in str(string) if i not in forbidden])

Javascript上面有类似的内容吗?

8 个答案:

答案 0 :(得分:9)

更新:已从标准中删除了数组解析。引用MDN

  

阵列理解语法是非标准的,并从Firefox 58开始删除。对于面向未来的用法,请考虑使用Array.prototype.map,Array.prototype.filter,箭头函数和扩展语法。

原始回答:

是的,JavaScript将在即将发布的EcmaScript版本7中支持数组理解:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Array_comprehensions

以下是一个示例:Array Comprehensions

var str =  "1234-5";
var ignore = "-";

console.log([for (i of str) if (!ignore.includes(i)) i]);

答案 1 :(得分:8)

阅读代码,我认为禁止可以有超过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);
    }
});

答案 2 :(得分:4)

不直接,但不难复制。

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循环。

答案 3 :(得分:3)

您可以使用应用程序仿函数轻松实现此行为。

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)

答案 4 :(得分:2)

对于&#34;完整性&#34; -sake,这是一个较短的正则表达式版本。

var str =  "1234-5";
var ignore = "-=";

console.log(str.replace(new RegExp(ignore.split("").join("|")), "").split(""));

编辑:确保RegExp没有&#34;阻塞&#34;对于特殊字符,ignore可以实现为regexp文字,而不是字符串:

var str =  "1234-5";
var ignore = /[\+=-]/;
console.log(str.replace(ignore, "").split(""));

答案 5 :(得分:2)

JavaScript不再支持数组理解。

我也在寻找等价的JavaScript。 Mozilla开发者Network indicates that this functionality is no longer supported. 首选语法在前面提到的链接中引用。

答案 6 :(得分:1)

给出问题的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 ]

以下是使用的Python和JavaScript代码元素的比较: (Python - &gt; Javascript):

  • print - &gt;的console.log
  • 迭代字符串中的字符 - &gt; spread operator
  • list comprehension'if' - &gt; Array.filter
  • list comprehension'for' - &gt; Array.map
  • substr in str? - &GT; string.includes

答案 7 :(得分:0)

确实有一个糟糕的男人版

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来过滤字符串。