javascript - javascript - 使用for循环插入多维数组
问题描述
我有一个示例数组,arr = [5,4,3,3,2,2,1]
我需要生成一个像这样的多维数组:
[0] => Array
(
[0] => 5
)
[1] => Array
(
[0] => 4
)
[2] => Array
(
[0] => 3
[1] => 3
)
[3] => Array
(
[0] => 2
[1] => 2
)
[4] => Array
(
[0] => 1
)
我不确定 javascript 数组是如何工作的。我试图编写代码,但最终所有新的数组元素都是1
var arr = [5,4,3,3,2,2,1]
var arrtemp = []
var temp = []
var tempval = 0
var col = 0
for (var i=0;i<arr.length;i++){
if (i==0) {
temp.push(arr[i])
tempval = arr[i]
}
else {
if (arr[i] == tempval){
temp.push(arr[i]);
}
else {
arrtemp[col] = temp;
col++;
temp.length =0;
temp.push(arr[i]);
tempval = arr[i];
}
}
}
console.log(arrtemp)
解决方案
幸运的是,你arr
的已经排序了。我会reduce
改用,其中累加器是一个数组数组。如果累加器中的最后一个数组与您正在迭代的新项目的值不同,请在其中创建一个新数组,然后推送到累加器中的最后一个数组:
var arr = [5,4,3,3,2,2,1];
const output = arr.reduce((a, num) => {
if (!a.length || a[a.length - 1][0] !== num) {
a.push([]);
}
a[a.length - 1].push(num);
return a;
}, []);
console.log(output);
推荐阅读
- json - 如何将标准 json 文件转换为 powershell 的 aws sqs cli json 输入文件格式
- javascript - 这个 For 循环怎么会以这种方式递增?(似乎指数)
- bit.dev - 是否可以在没有 bit.dev 帐户的情况下使用 Bit?
- reactjs - 将 redux 状态与 url 路径同步
- wso2 - WSO2 API 管理器 - 范围验证失败
- python - 我的 MaxArray 列表在控制该值的唯一 if 语句之外进行更新
- amazon-web-services - 配置 cloudwatch “空闲”警报
- r - 如何使用 dplyr 在 NSE 中获取变量的名称
- snapshot - 将“单节点集群”快照还原为“多节点集群”的问题
- python - Cocos2d 平铺地图 - AttributeError