按块排序数组不起作用[重复]

Posted

技术标签:

【中文标题】按块排序数组不起作用[重复]【英文标题】:Sorting array in chunks doesn't work [duplicate] 【发布时间】:2018-09-13 18:51:24 【问题描述】:

看似简单的任务,但行不通。我有一个已知长度的数组(比如 9)和一个块大小(比如 3)。数组总是可以被那个块整除,不需要测试。初试:

const chunked = [];
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

for(let i=0; i<3; i++)  
    chunked[i] = arr.slice(i*3, 3);


console.log(chunked);

但后来意识到slice() 可能会覆盖它的输入,所以:

const chunked = [];
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

for(let i=0; i<3; i++)  
    let temp = arr.slice();
    chunked[i] = temp.slice(i*3, 3);


console.log(chunked);

但仍然只创建第一个块...我的错误在哪里?

【问题讨论】:

slice 的第二个参数不是长度,而是结束索引。 哦,是的,没有意识到这一点。这工作for(let i=0; i&lt;3; i++) let temp = res.slice(); res2[i] = temp.slice(i*3, (i+1)*3); 非常感谢 我知道类似的 SO 问题,但这些似乎太复杂了。在我的评论中,这种方式似乎更简单、更容易理解 【参考方案1】:

slice() 方法返回数组一部分的浅拷贝 进入从开始到结束(不包括结束)选择的新数组对象。 原数组不会被修改。

arr.slice([begin[, end]])

您可以从 0 循环到数组的长度,然后按块大小递增。

喜欢:

const chunked = [];
const chuckSize = 3;
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

for (let i = 0; i < arr.length; i += chuckSize) 
  chunked.push(arr.slice(i, i + chuckSize));


console.log(chunked);

【讨论】:

【参考方案2】:

尝试关注

const chunked = [];
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];

for(let i=0; i<3; i++)  
    let temp = arr.slice();
    
    chunked[i] = temp.slice(i*3, (i+1)*3); // Need to set appropriate begin and end


console.log(chunked);

供参考,Array.slice

【讨论】:

【参考方案3】:

slice 的第二个参数是您可能假设的结束索引(不是长度)。你可以找到文档here

【讨论】:

【参考方案4】:

函数sliceslice(firstIndex, lastIndex + 1)为参数

请使用以下代码:

 const chunked = [];
    const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    
    for(let i=0; i<3; i++)  
        chunked[i] = arr.slice(i*3, i*3 + 3);
    
    
    console.log(chunked);

【讨论】:

以上是关于按块排序数组不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript排序数组不起作用

检查数组中是不是存在迭代器时,array.includes 不起作用[重复]

在对数组进行排序并传递它之后,React 钩子 useState/setState 不起作用

冒泡排序不起作用

矢量排序和擦除不起作用

对字符串排序并浮动不起作用