Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby=>;Javascript翻译_Javascript_Ruby_Deep Copy - Fatal编程技术网

Ruby=>;Javascript翻译

Ruby=>;Javascript翻译,javascript,ruby,deep-copy,Javascript,Ruby,Deep Copy,好奇。。。你会如何用JS编写这个Ruby Array.new(3, Array.new(3, 0)) 返回 [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 我试过各种各样的东西,但它们看起来都很乱。我想有些东西不可能像Ruby那么干净,但是你会怎么做呢 也许我会学一两个JS技巧;) 编辑 据透露,这段Ruby代码实际上并没有创建3个数组。它创建一个数组,其他数组引用该数组。这并非本意。我正在寻找一种在JS中轻松映射包含X个元素和Y个嵌套元素的二维数组的方法 还有。。。这是

好奇。。。你会如何用JS编写这个Ruby

Array.new(3, Array.new(3, 0))
返回

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
我试过各种各样的东西,但它们看起来都很乱。我想有些东西不可能像Ruby那么干净,但是你会怎么做呢

也许我会学一两个JS技巧;)

编辑 据透露,这段Ruby代码实际上并没有创建3个数组。它创建一个数组,其他数组引用该数组。这并非本意。我正在寻找一种在JS中轻松映射包含X个元素和Y个嵌套元素的二维数组的方法


还有。。。这是一个人为的例子。其目的是能够用任何数字代替3。这只是一个使用3的示例。

如果您只是想要一个空的数组容器,只是为了跟踪长度,或者以后分配值,您可以这样做,有点老套,但应该可以:

var a = [[,,],[,,],[,,]]

a[1][1] = 'foo'
alert(a[1][1]) //foo

以下是有效的Javascript语法,假设您要创建4个数组:

[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
编辑:

实际上,您的ruby代码只创建了两个数组。一个数组是
[0,0,0]
,另一个数组包含对该数组的三个引用。如果更改
数组[0][2]
也会更改
数组[1][2]
。你确定这就是你想要的吗?等效的javascript代码为:

var b = [0, 0, 0];
var a = [b, b, b];

您可以这样定义它:

var arr = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];
本质上,你是在明确地定义它。但是,此数组包含对三个不同数组的引用(总共4个)。要使其行为类似于ruby,您需要创建一个模仿此行为的函数:

function arr(size, element) {
   var ret = [];

   for(var i = 0; i < size; i++) {
       ret.push(element);
   }

   return ret;      
}

这更符合您在ruby中看到的行为,因为数组中的每个元素都是对同一数组的引用(总共只有两个数组)。您可以通过执行
myArray[0][1]=2来验证这一点然后检查
myArray
。您应该可以看到
myArray
中每个数组中的第二个元素设置为2。

我想您可以这样做:


另一种方法是:

var arr = new Array(
    new Array(0, 0, 0),
    new Array(0, 0, 0),
    new Array(0, 0, 0)
);
或者干脆

var arr = [
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]
]

在Ruby中,您可以得到这样的效果

a = Array.new(3) { Array.new(3, 0) }
p a #[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
a[0][0] = 1
p a #[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
var multi_dim = function(a, b, value) {
  var myObj = [];
  for (i=0;i<a;i++) {
    myObj[i] = [];
    for (j=0;j<b;j++) {
      myObj[i][j] = value;
    }
  }
  return myObj;
};

var c = multi_dim(3,3,0);
WScript.echo(c); //0,0,0,0,0,0,0,0,0
c[0][0]=1
WScript.echo(c); //1,0,0,0,0,0,0,0,0
在JS中是这样的

a = Array.new(3) { Array.new(3, 0) }
p a #[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
a[0][0] = 1
p a #[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
var multi_dim = function(a, b, value) {
  var myObj = [];
  for (i=0;i<a;i++) {
    myObj[i] = [];
    for (j=0;j<b;j++) {
      myObj[i][j] = value;
    }
  }
  return myObj;
};

var c = multi_dim(3,3,0);
WScript.echo(c); //0,0,0,0,0,0,0,0,0
c[0][0]=1
WScript.echo(c); //1,0,0,0,0,0,0,0,0
var multi_dim=函数(a、b、值){
var myObj=[];

for(i=0;我即将发布此内容。如果压缩
[[0,0,0],[0,0,0],[0,0,0]]
的字符数与ruby版本差不多。哦,我喜欢你的编辑+1,但你必须设置
b=“[0,0,0]”约翰,我不知道你为什么想把
b
变成一个字符串。OP没有提到字符串。我只是加了分号。啊!我没有意识到这一点。这不是我的本意。但这会创建嵌套数组,每个数组的第一个元素都是字符串。同意,你必须使用
evil()
或主要是找到其他解决方案