通过引用传递问题对JQuery中重用PHP代码进行置换
Permutations reusing PHP code in JQuery with passing by reference issue
原始代码:
// function to generate and print all N! permutations of $str. (N = strlen($str)).
function permute($str,$i,$n) {
if ($i == $n)
print "$str'n";
else {
for ($j = $i; $j < $n; $j++) {
swap($str,$i,$j);
permute($str, $i+1, $n);
swap($str,$i,$j); // backtrack.
}
}
}
// function to swap the char at pos $i and $j of $str.
function swap(&$str,$i,$j) {
$temp = $str[$i];
$str[$i] = $str[$j];
$str[$j] = $temp;
}
$str = "hey";
permute($str,0,strlen($str)); // call the function.
我想为我的jquery重用这个带有排列的代码,所以这里是我的代码:
div id="wrapper">
<input type="text" id="word">
</div>
<div id="combinations">
<p>
</p>
</div>
<script>
function permute(str,i,n) {
if (i == n)
$('p').append(str+" ");
else {
for (j = i; j < n; j++) {
swap(str,i,j);
permute(str, i+1, n);
swap(str,i,j); // backtrack.
}
}
}
// function to swap the char at pos $i and $j of $str.
function swap(str,i,j) {
var temp = str[i];
str[i] = str[j];
str[j] = temp;
}
$('#word').on('input',function(e){
var str = $("#word").val();
if(str == ''){
$('p').empty();
}
if(str.length != strOld){
$('p').empty();
}
var strOld = str.length;
permute(str, 0,str.length)
});
</script>
所以在那一段中,我想显示用户输入的所有排列,所以如果用户输入AB,它将显示AB BA等等,我真的不确定我该如何改变&str从原来的一个到JQuery我读过其他一些关于在JS/JQuery中通过引用传递的堆栈问题,我真的无法理解
现在,这段代码并没有产生任何错误,它只是显示用户输入的输入字段的确切副本。
更新:我尝试了你的建议:
function permute(str,i,n) {
if (i == n)
$('p').append(str+" ");
else {
for (j = i; j < n; j++) {
str = swap(str,i,j);
permute(str, i+1, n);
str = swap(str,i,j); // backtrack.
}
}
}
function swap(str,i,j) {
str = str.split("");
var temp = str[i];
str[i] = str[j];
str[j] = temp;
return str.join("");
}
var str = "hey";
permute(str, 0,str.length)
它只显示了嘿,没有其他
这是PHP代码的JS版本:
function permute( str, i, n ) {
if ( i == n ){
console.log(str);
} else {
for ( var j = i; j < n; j++) {
str = swap( str, i, j );
permute( str, i+1, n );
str = swap( str, i, j ); // backtrack.
}
}
}
// function to swap the char at pos $i and $j of $str.
function swap( str, i, j ) {
str = str.split("");
var temp = str[i];
str[i] = str[j];
str[j] = temp;
return str.join("");
}
var str = "hey";
permute( str, 0, str.length ); // call the function.
这是JSFiddle
JavaScript不知道函数的参数。有些人说是这样,因为对象是通过引用传递的,但事实并非如此。对象是引用类型,这意味着对象变量本身就是(对对象数据的)引用,但您仍然通过值传递变量本身,因此无法更改它。
但在这种情况下,它甚至与对象无关,而是与字符串有关。
我认为最简单的解决方案是返回新字符串:
function swap(str,i,j) {
var temp = str[i];
str[i] = str[j];
str[j] = temp;
return str;
}
然后这样称呼它:
str = swap(str,i,j);
相关文章:
- 如何在php变量中嵌入JQuery代码
- php代码在textbox更改事件上显示null
- 在CodeIgniter视图中将Javascript或jQuery代码作为PHP文件编写可以吗
- 如何检查这个代码点火器php函数是否工作,该函数是否在ajax url中使用
- 使用PHP来阻止用户下载代码,但代码占用cpu
- 使用解析为javascript源的.php,如何使用条件语句将javascript代码封装在php括号之间
- 无法运行php代码,有角度路由问题
- php javascript代码从javascript调用php函数
- jquery中的PHP代码不起作用
- 如何在脚本部分使用php部分代码中的变量
- 获取PHP代码中日期选择器的值
- PHP代码古埃及乘法javascript
- 使用php或javascript根据某种url代码更改网页中的图片
- 代币违法;PHP内部JavaScript代码
- PHP代码中实现的JavaScript |if语句不起作用
- HTML 看不到 Javascript 代码;PHP 代码中的执行中断而没有错误
- 带有哈希密码的代码 PHP 无法工作
- 通过ajax或直接输出的行业标准代码PHP和JSON数据
- 检查MySQL数据库并添加代码PHP
- 将回显的HTML代码(PHP)追加到Javascript