[英]Convert list comprehension python to javascript
我正在尝试将一些 python 代码转换为 JavaScript 代码。
我有一个将参数a
作为输入的 python 列表理解。 a
是一个字符串,例如“bac”。
asubstring = [a[i:i + j] for j in range(1, len(a) + 1) for i in range(len(a) - j + 1)]
输出为: ['b', 'a', 'c', 'ba', 'ac', 'bac']
我通过执行以下操作将其转换为 JavaScript:
let j = 1
let i = 0
while(j < aTrimmed.length+1) {
while(i < aTrimmed.length - j + 1) {
aSubstring.push(aTrimmed.slice(i, i+j))
i++
}
j++
}
但是,我的输出是: [ 'b', 'a', 'c' ]
我不确定我在两个 while 循环中缺少什么。
使用for
循环而不是while
因为您忘记了在第二个循环结束时将i
索引重置为 0。
let aTrimmed = "bac";
let aSubstring = [];
for(let j = 1; j < aTrimmed.length+1; j++) {
for(let i = 0; i < aTrimmed.length - j + 1; i++) {
aSubstring.push(aTrimmed.slice(i, i + j));
}
}
alert(aSubstring);
问题是您没有重置内部循环中的i
变量。 在 Python 版本中, for i in range(...)
总是让i
从0
开始。 此外,声明一个迭代变量,然后使用以递增该变量结束的while
循环有点奇怪,为什么不使用for
循环呢?
let aTrimmed = "abc"; let aSubstring = []; for (let j = 1; j <= aTrimmed.length; j++) { for (let i = 0; i <= aTrimmed.length - j; i++) { aSubstring.push(aTrimmed.slice(i, i + j)); } } console.log(aSubstring);
还要注意<=
而不是< ... + 1
。
此版本更适用于 Unicode 基本多语言平面之外的字符。 尽管字素簇仍然存在问题。
let s1 = "abc" let s2 = "🧽🍿🛥" function substrings(s) { let us = [...s] let result = [] for (let j = 1; j <= us.length; j++) { for (let i = 0; i <= us.length - j; i++) { result.push(us.slice(i, i + j).join('')) } } return result } console.log(substrings(s1)) console.log(substrings(s2))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.