【发布时间】:2010-12-24 13:12:13
【问题描述】:
我正在尝试在 javaScript 中实现我在 C# 中找到的算法,但遇到了一些问题。
基本上我发现很难在 JS 中通过引用传递。我已将问题分解为以下示例代码,假设您有以下 C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
wordPoco[] myArray = new wordPoco[4] {
new wordPoco {word="This"},
new wordPoco {word="is"},
new wordPoco {word="a"},
new wordPoco {word="test"}};
Console.WriteLine("Values Before Recursion");
MyRecursiveFunction(ref myArray);
Console.Read();
}
private static void MyRecursiveFunction(ref wordPoco[] myArray)
{
if (myArray.Length <= 0) {
Console.WriteLine();
Console.WriteLine("Values After Recursion");
return;
}
wordPoco[] newArray = (wordPoco[])myArray.Clone();
Console.Write("ArrayValue: ");
for (int j = 0; j < newArray.Length; j++)
{
Console.Write(newArray[j].word + " ");
}
Console.WriteLine();
//popping in js
wordPoco[] poppedArray = new wordPoco[newArray.Length - 1];
Array.Copy(newArray, poppedArray, newArray.Length - 1);
newArray = (wordPoco[])poppedArray.Clone();
MyRecursiveFunction(ref newArray);
myArray = (wordPoco[])newArray.Clone();
Console.Write("ArrayValue: ");
for (int j = 0; j < myArray.Length; j++)
{
Console.Write(myArray[j].word + " ");
}
Console.WriteLine();
}
}
public class wordPoco {
public string word;
}
}
产生输出:
Values Before Recursion
ArrayValue: This is a test
ArrayValue: This is a
ArrayValue: This is
ArrayValue: This
Values After Recursion
ArrayValue:
ArrayValue:
ArrayValue:
ArrayValue:
下面的JS不应该产生同样的结果吗?
$(document).ready(function() {
var debugBox = $("#debug");
var myArray = [{ word: "This" }, { word: "is" }, { word: "a" }, { word: "test"}];
debugBox.append("<b>Values Before Recursion</b><br/>");
MyRecursiveFunction(myArray);
function MyRecursiveFunction(myArray) {
if (myArray.length <= 0) { debugBox.append("<b>Values After Recursion</b><br/>"); return false; }
var newArray = $.extend(true, [], myArray);
debugBox.append("ArrayValue: ");
for (var j = 0; j < newArray.length; j++)
debugBox.append(newArray[j].word + " " );
debugBox.append("<br/>");
newArray.pop();
arguments.callee(newArray);
myArray = $.extend(true, [], newArray);
debugBox.append("ArrayValue: ");
for (var j = 0; j < myArray.length; j++)
debugBox.append(myArray[j].word + " ");
debugBox.append("<br/>");
}
});
我得到的结果实际上是:
Values Before Recursion
Value: This is a test
Value: This is a
Value: This is
Value: This
Values After Recursion
Value:
Value: This
Value: This is
Value: This is a
非常感谢您的宝贵时间, 凯文
【问题讨论】:
标签: c# javascript pass-by-reference