Javascript 如何在自定义阵列中切片阵列?
我有这个阵列:Javascript 如何在自定义阵列中切片阵列?,javascript,arrays,node.js,Javascript,Arrays,Node.js,我有这个阵列: var x = [1,2,3,4,5,"a","b","c",9,10]; 我想将此阵列分割成以下模式: 我使用了下面的代码并且能够得到[[1,2,3],[4,5,a],[b,c,9],[10,11,12]。但这对我不起作用。我需要得到上面的图案 var stream = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; var x = ["a", "b", "c"]; var ad_time = 6; var result = []; var
var x = [1,2,3,4,5,"a","b","c",9,10];
我想将此阵列分割成以下模式:
我使用了下面的代码并且能够得到[[1,2,3],[4,5,a],[b,c,9],[10,11,12]。但这对我不起作用。我需要得到上面的图案
var stream = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var x = ["a", "b", "c"];
var ad_time = 6;
var result = [];
var ad_index = stream.indexOf(ad_time);
if (~ad_index) {
for (var i = 0; i < x.length; i++) {
stream[ad_index + i] = x[i];
}
}
while (stream.length > 0) {
var chunk = stream.splice(0, 3);
result.push(chunk);
}
console.log(JSON.stringify(result));
谢谢你 您可以通过一个简单的for循环来实现: VarX=[1,2,3,4,5,a,b,c,9,10]; var结果=[]; 对于var i=0,il=x.length-2;i
var x = [1,2,3,4,5,"a","b","c",9,10];
var new_array = [];
for (var i = 0; i < x.length - 2; i++) {
new_array.push(x.slice(i, i + 3));
}
此代码应执行以下操作:
var x = [1,2,3,4,5,"a","b","c",9,10];
var new_array = [];
for (var i = 0; i < x.length - 2; i++) {
new_array.push(x.slice(i, i + 3));
}
你是个天才。。。非常感谢。但是我想丹尼尔的解决方案看起来更优雅?@scaryguy是的,Array.slice更优雅,但是它比直接访问慢得多。看这个测试:因为这个性能差异,我接受你的答案Gergo。你能在你的答案中加上这个关于性能的注释吗?评论可能不会被每个人看到。谢谢@当然,在我的回答中加了一句话。你是个天才。。。非常感谢。但是我想丹尼尔的解决方案看起来更优雅?@scaryguy是的,Array.slice更优雅,但是它比直接访问慢得多。看这个测试:因为这个性能差异,我接受你的答案Gergo。你能在你的答案中加上这个关于性能的注释吗?评论可能不会被每个人看到。谢谢@当然,在我的回答中添加了一个注释。哇!你能解释一下吗?你是如何找到这个解决方案的?@scaryguy这是相当简单的。循环除最后两个元素之外的所有元素,因为您需要三个一组的元素。如果你想要4人一组,你需要从数组的长度中减去3。在每次传递过程中,根据新数组中长度为3的索引存储原始数组的复制切片。Daniel,感谢您的回答,但请参见Gergo在其评论中给出的链接。这个解决方案几乎比他的解决方案慢7倍。虽然你的回答似乎更优雅,但为了引起其他读者的注意,我接受了他的回答。再次感谢。@Mouser,谢谢你的解释。如果不是从那句鄙视的话开始的话,我会对你的评论投赞成票。哇!你能解释一下吗?你是如何找到这个解决方案的?@scaryguy这是相当简单的。循环除最后两个元素之外的所有元素,因为您需要三个一组的元素。如果你想要4人一组,你需要从数组的长度中减去3。在每次传递过程中,根据新数组中长度为3的索引存储原始数组的复制切片。Daniel,感谢您的回答,但请参见Gergo在其评论中给出的链接。这个解决方案几乎比他的解决方案慢7倍。虽然你的回答似乎更优雅,但为了引起其他读者的注意,我接受了他的回答。再次感谢。@Mouser,谢谢你的解释。如果不是从那句鄙视的话开始的话,我会对你的评论投赞成票。