JavaScript是否像Python一样支持数组/列表理解?
我正在练习/学习JavaScript和Python。我想知道Javascript是否与这种类型的编码等效 为了便于练习,我基本上是从字符串中的每个整数中获取一个数组。我对Python比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
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])