如何在Javascript中对二维数组进行子集操作?

5

我一直在寻找方法,发现可以使用myArray[x][y]从二维数组中检索元素。然而,我想要做的是获取除第一列以外的所有内容。

在R语言中,可以使用myArray[x,2:y]来实现这一点,但我知道在Javascript中冒号是完全不同的运算符。

谢谢


你总是可以从第一列开始偏移,为什么那样不行呢? - epoch
@epoch 你要如何从第一列开始偏移?假设你有一个形式为 myArray = [[1,2,3],[4,5,6],[7,8,9]] 的数组。 - Jan
2个回答

6

如果您想要获取 y 中的所有内容,请尝试使用 map

var y = myArray.map(function(v){ return v[1] });

不确定这是否与您发布的R代码等效...

如果您想要减去第一列,请尝试以下方法:

return v.slice(1);

据我所知,它返回原始数组中每个数组的第一个元素组成的数组。 - Jan
然后你可以返回这些列:return [v[1],v[2]] - elclanrs
好的,我想我只能这样做了,我原本希望有一种更简洁的方法,因为我正在处理一个稍微大一些的数组。 - Jan
切片函数似乎在map函数外部可以工作,但是一旦进入该函数内部,我就会收到“未定义的切片”错误。 - Jan
抱歉,我犯了一个错误,现在它完美地运行了。谢谢! - Jan
显示剩余3条评论

5

您的例子中,myArray = [[1,2,3],[4,5,6],[7,8,9]],想要获取[[2,3],[5,6],[8,9]]。

您可以这样做:

var myArray = [[1,2,3],[4,5,6],[7,8,9]];    
var results = [];

for(var i = 0; i < myArray.length; i++){
  results.push(myArray[i].slice(1,3));
}
//results === [[2,3],[5,6],[8,9]];

如果您想从每个子数组的index[0]后切片索引,那么您可能需要采用以下方法:

var myArray = [[1,2,3],[4,5,6],[7,8,9]];    

var sliceSubset = function(array){
  var results = [];
  for(var i = 0; i < array.length; i++){
    results.push(array[i].slice(1,array[i].length));
  }
  return results;
}

sliceSubset(myArray); //returns [[2,3],[5,6],[8,9]]
//works on different sized arrays as well
var myOtherArray = [[1,2,3,9],[4,5,6],[7,8,9]];
sliceSubset(myOtherArray); //returns [[2,3,9],[5,6],[8,9]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接