Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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
Javascript 如何在自定义阵列中切片阵列?_Javascript_Arrays_Node.js - Fatal编程技术网

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;iconsole.logresult 您可以通过一个简单的for循环来实现:

VarX=[1,2,3,4,5,a,b,c,9,10]; var结果=[]; 对于var i=0,il=x.length-2;iconsole.logresult 此代码应执行以下操作:

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,谢谢你的解释。如果不是从那句鄙视的话开始的话,我会对你的评论投赞成票。