gpt4 book ai didi

Javascript 排列魔术

转载 作者:行者123 更新时间:2023-11-30 11:42:37 24 4
gpt4 key购买 nike

我正在阅读一些算法来尝试理解 javascript 中的排列,下面的算法让我非常震惊

var permArr = [], usedChars = [];
function permute(input) {
var i, ch, chars = input.split('');
for (i = 0; i < chars.length; i++) {
ch = chars.splice(i, 1);
usedChars.push(ch);
if (chars.length == 0) permArr[permArr.length] = usedChars.join('');
permute(chars.join(""));
chars.splice(i, 0, ch);
usedChars.pop();
}
return permArr
}

仅供引用,我在以下网站上找到了这个算法:http://staff.roguecc.edu/JMiller/JavaScript/permute.html

我可以看到这个算法有效,但是有一行让我感到困惑,我找不到它有效的地方

var i, ch, chars = input.split("");

如果我在代码之前或之后使用 console.log(i) 或 console.log(ch),它会在任何地方返回 undefined。如果我删除 i 和 ch,该算法将不再有效。

有人可以向我解释这条线及其工作原理吗?非常感谢

最佳答案

不涉及魔法

var i, ch, chars = input.split('');

声明变量ichchars 并将input.split 分配给chars ('') 返回。

基本上等同于

var i; // undefined
var ch; // undefined
var chars = input.split(''); // Array of string

这通常是为了让变量在循环迭代中可用(以访问以前的值)。

然而...

i 只是循环变量,可以声明为内联

for (var i = 0; i < chars.length; i++) {

ch 可以存在于循环内,因为它无论如何都会在第一条语句中重新分配

  for (var i = 0; i < chars.length; i++) {
var ch = chars.splice(i, 1);

这确实让这个例子令人困惑(可以说它写得不好)

关于Javascript 排列魔术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42071199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com