Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Split - Fatal编程技术网

将Javascript数组元素拆分为指定索引处的块

将Javascript数组元素拆分为指定索引处的块,javascript,arrays,split,Javascript,Arrays,Split,我有一个这样的数组 const arr = [3,6,9,12,18,21,24,27,33,36]; 我希望数组arr在12、21和33处分成块。也就是指数3、5和8。我想生成另一个数组块如下所示 const chunks = [[3,6,9,12],[18,21],[24,27,33],[36]]; 我在这里看到的解决方案基本上是将数组分成“n”个块。基本上,我希望在多个(指定的)索引处拆分数组 我不介意下划线.js/lodash解决方案。谢谢 const arr=[3,6,9,12,1

我有一个这样的数组

const arr = [3,6,9,12,18,21,24,27,33,36];
我希望数组arr在12、21和33处分成块。也就是指数3、5和8。我想生成另一个数组如下所示

const chunks = [[3,6,9,12],[18,21],[24,27,33],[36]];
我在这里看到的解决方案基本上是将数组分成“n”个块。基本上,我希望在多个(指定的)索引处拆分数组

我不介意下划线.js/lodash解决方案。谢谢

const arr=[3,6,9,12,18,21,24,27,33,36];
//重要提示:此数组发生变异。如果不行,就复印一份。
常数inds=[3,5,8];
const chunked=arr.reduce((p,c,i)=>{if(i-1==inds[0]){inds.shift();p.push([]);}p[p.length-1]。push(c);返回p;},[[]);

log(分块)
您可以使用
reduceRight
并决定在哪个元素上拆分。由于您提供的是子数组的最后一个值,而不是第一个值,因此从右到左实际上更容易一些,因此我使用了
reduceRight
而不是
reduce

按价值分割
const arr=[3,6,9,12,18,21,24,27,33,36],
splitValues=[12,21,33],
chunks=arr.reduceRight((结果,值)=>{
结果[0]=结果[0]| |[];
if(拆分值。包括(值)){
结果:未移位([值]);
}否则{
结果[0]。取消移位(值);
}
返回结果;
}, []);
console.log(块)

.as console wrapper{max height:100%!important;top:0;}
这里有一种我认为更清晰的替代方法

function chunkIt(arr, indexes) {
    const ret = [];
    let last = 0;

    indexes.forEach(i => {
        ret.push(arr.slice(last, i + 1));
        last = i + 1;
    });
    if (last < arr.length) {
        ret.push(arr.slice(last));
    }
    return ret;
}

console.log(chunkIt([3,6,9,12,18,21,24,27,33,36], [3,5,8]));
函数chunkIt(arr,索引){
常数ret=[];
设last=0;
index.forEach(i=>{
后推(arr.slice(最后一个,i+1));
last=i+1;
});
如果(最后一次
有点“简化”版本,索引颠倒,但是
splice
修改了源数组:

arr=[3,6,9,12,18,21,24,27,33,36]
chunks=[9,6,4,0].map(i=>arr.splice(i)).reverse()

console.log(JSON.stringify(chunks))
?这里的答案是将一个数组拆分为2个(虽然是按索引),将我的数组拆分为几个部分。它不是完全重复的,但无法在一个操作中拆分它,例如可以对字符串进行拆分。数组的每个部分都必须在一个循环中单独提取。感谢您提供了按值分割的解决方案