for (let i in string) {} 是否等同于 for (let i = 0; i < string.length; i++) {}?
Is for (let i in string) {} equivalent to for (let i = 0; i < string.length; i++) {}?
我写了两段代码,我想它们的工作原理应该是一样的。正如您可能注意到的,两者之间唯一不同的是 for 循环的声明。
为什么带有 for-in 的代码没有按预期运行?
提前致谢。
const allPermutations1 = s => {
let permutations = []
const recursion = (s, p = '') => {
if (s.length === 0) return permutations.push(p)
for (let i = 0; i < s.length; i++)
recursion(s.slice(0, i) + s.slice(i+1), p + s[i])
}
return (recursion(s), permutations)
}
allPermutations1('123') // ["123", "132", "213", "231", "312", "321"]
const allPermutations2 = s => {
let permutations = []
const recursion = (s, p = '') => {
if (s.length === 0) return permutations.push(p)
for (let i in s)
recursion(s.slice(0, i) + s.slice(i+1), p + s[i])
}
return (recursion(s), permutations)
}
allPermutations2('123') // ["123", "132", "21", "312", "321"]
const allPermutations2 = s => {
let permutations = [];
const recursion = (s, p = "") => {
if (s.length === 0) return permutations.push(p);
for (let i in s) {
recursion(
s.slice(0, parseInt(i)) + s.slice(parseInt(i) + 1),
p + s[parseInt(i)]
);
}
};
return recursion(s), permutations;
};
将产生与第一个相同的结果。当你做 for..in 键是字符串。
A for...in
循环遍历键和 returns 字符串。当您在拼接内应用 i+1
迭代器时,您将返回一个字符串连接而不是递增值。例如 '1' + '2'
是 '12'
而不是 3
。这种情况在正确拼接数字时可能会出现问题。您需要将密钥解析为数字才能按预期执行操作。
我写了两段代码,我想它们的工作原理应该是一样的。正如您可能注意到的,两者之间唯一不同的是 for 循环的声明。
为什么带有 for-in 的代码没有按预期运行?
提前致谢。
const allPermutations1 = s => {
let permutations = []
const recursion = (s, p = '') => {
if (s.length === 0) return permutations.push(p)
for (let i = 0; i < s.length; i++)
recursion(s.slice(0, i) + s.slice(i+1), p + s[i])
}
return (recursion(s), permutations)
}
allPermutations1('123') // ["123", "132", "213", "231", "312", "321"]
const allPermutations2 = s => {
let permutations = []
const recursion = (s, p = '') => {
if (s.length === 0) return permutations.push(p)
for (let i in s)
recursion(s.slice(0, i) + s.slice(i+1), p + s[i])
}
return (recursion(s), permutations)
}
allPermutations2('123') // ["123", "132", "21", "312", "321"]
const allPermutations2 = s => {
let permutations = [];
const recursion = (s, p = "") => {
if (s.length === 0) return permutations.push(p);
for (let i in s) {
recursion(
s.slice(0, parseInt(i)) + s.slice(parseInt(i) + 1),
p + s[parseInt(i)]
);
}
};
return recursion(s), permutations;
};
将产生与第一个相同的结果。当你做 for..in 键是字符串。
A for...in
循环遍历键和 returns 字符串。当您在拼接内应用 i+1
迭代器时,您将返回一个字符串连接而不是递增值。例如 '1' + '2'
是 '12'
而不是 3
。这种情况在正确拼接数字时可能会出现问题。您需要将密钥解析为数字才能按预期执行操作。