Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript是否像Python一样支持数组/列表理解?_Javascript_Python - Fatal编程技术网

JavaScript是否像Python一样支持数组/列表理解?

JavaScript是否像Python一样支持数组/列表理解?,javascript,python,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有类似的功能吗?不直接使用,但复制并不困难 var stri

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

为了便于练习,我基本上是从字符串中的每个整数中获取一个数组。我对Python比JavaScript更精通

Python:

string = '1234-5'

forbidden = '-'

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

Javascript有类似的功能吗?

不直接使用,但复制并不困难

var string = "1234-5";

var forbidden = "-";

string.split("").filter(function(str){
    if(forbidden.indexOf(str) < 0) {
        return str;
    }
}).forEach(function(letter) { console.log(letter);});
var string=“1234-5”;
var禁止=“-”;
string.split(“”).filter(函数(str){
如果(禁止。索引(str)<0){
返回str;
}
}).forEach(函数(字母){console.log(字母);});
我更直接地猜测:

for(var i=0 ; i < str.length ; i++) {
    if(forbidden.indexOf(str) < 0) {
        console.log(str[i]);
    }
}
for(变量i=0;i

但是在for循环中没有内置的过滤方法。

读取代码时,我假设禁止可以有超过1个字符。我还假设输出应该是“12345”

var string=“12=34-5”;
var禁止=“=-”;
console.log(string.split(“”).filter(函数(str){
禁止返回。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);
    }
});
var string=“12=34-5”;
var禁止=“=-”;
string.split(“”).forEach(函数(str){
如果(禁止。索引(str)<0){
console.log(str);
}
});

更新:从标准中删除了数组理解。引述:

数组理解语法是非标准的,从Firefox58开始删除。对于将来使用的用法,考虑使用ARARY.Type Type .MAP、ARARY.Type Type .Futter、箭头函数和扩展语法.

有关
Array.prototype.map
的示例,请参见:

let emails=people.map(({email})=>email)

原始答案:

是的,JavaScript将支持即将发布的EcmaScript版本7

这是一个例子

为了“完整性”,这里有一个较短的regexp版本

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

console.log(str.replace(new RegExp(ignore.split("").join("|")), "").split(""));
编辑:为了确保RegExp不会“阻塞”特殊字符,
ignore
可以实现为RegExp文本,而不是字符串:

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

它确实有一个穷人的版本

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

您可以使用应用程序函子轻松实现这种行为

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)

给出问题的Python代码

print([int(i) for i in str(string) if i not in forbidden])
这是最直接的JavaScript翻译(ES2015):

const字符串='1234-5';
禁止常数='-';
console.log([…string].filter(c=>!probled.includes(c)).map(c=>parseInt(c));

//结果:[1,2,3,4,5]
JavaScript不再支持数组理解

我也在寻找JavaScript的等价物。Mozilla开发者的
首选语法在前面的链接中引用。

我相信OP询问的是JavaScript代码,这些代码可以在今天运行,而不是在将来某个不确定的时间运行。巴贝尔很棒!也许你可以扩展一下你的答案,并举例说明语法是什么,以及如何在今天的浏览器中使用Babel。当然,请参阅更新@user2864740:虽然如此,但数组理解将成为ES7的一部分,有了Babel,现在就可以使用它了。MDN页面顶部说:“数组理解是非标准的,不太可能添加到ECMAScript中。”。似乎有更多的细节。如果其他人在多年后对这个答案感到困惑,这并不像上面链接中提供的“示例”所证明的那样有效。不,它不起作用。尽管JavaScript确实支持,ES5在Array.prototype中添加了对一些基本映射/过滤器支持的支持(虽然可以模拟map concat,但没有直接的flatmap)。还有像下划线这样的附加库,它向这组“原语”中添加了Python在列表理解语法的伪装下所做的一切当,我也很喜欢你的解决方案;它更多地属于我的编码类型你是说应用函子吗?你能给你的答案提供更多的上下文吗?这很有趣。虽然乍一看它似乎很有趣,但我看不出有任何理由用它来代替普通的
[2]。map(x=>x+1)
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)
print([int(i) for i in str(string) if i not in forbidden])