javascript - JavaScript中未知大小的多维数组
问题描述
真的很难解决这个问题......我正在尝试将数组中的项目排序到另一个数组中,但已分类。我的代码目前正在运行,但问题是我需要知道“排序”数组的大小。目前,有四个条目与“数据”一起使用。前两个 data.cat 与 n 进行比较,它们的 ID 被推入 sort[0]。当两个不匹配时,将 1 添加到 c。然后代码再次循环,将新匹配推入 sort[1] 等。
var data = [
{"cat": 0, "id":"AAAA"},
{"cat": 0, "id":"BBBB"},
{"cat": 1, "id":"CCCC"},
{"cat": 1, "id":"DDDD"},
{"cat": 1, "id":"EEEE"},
{"cat": 1, "id":"FFFF"}, //pseudodata
{"cat": 1, "id":"GGGG"},
{"cat": 2, "id":"HHHH"},
{"cat": 2, "id":"IIII"},
{"cat": 2, "id":"JJJJ"},
{"cat": 3, "id":"KKKK"}
];
var sort = [[], [], [], [],]
function sortDates(){
var n = 0;
for (var i = 0; i < data.length; i++){
if (data[i].cat == n){
console.log("Category " + n +" entry: " + data[i].id);
sort[n].push(data[i].id);
} else {
console.log("Entry " + data[i].id + " does not match. Moving to next category...");
n++;
i--;
}
}
}
这一切正常,但如果我向数据数组添加更多内容(例如 {"cat": 4, "id":"LLLL"}),程序会因“sort[n] is not a function”而崩溃。这是因为排序数组中只有四个可用项。
所以我只是想知道,有没有办法解决这个问题?如果数据数组总是在改变大小,并且添加了更多条目/类别,我是否必须继续手动调整排序数组的大小?
解决方案
您可以使用逻辑 OR||
对数组进行默认检查,如果未设置该项目,则分配一个空数组。
sort[n] = sort[n] || [];
sort[n].push(data[i].id);
顺便说一句,您可以cat
直接使用而无需迭代sort
数组来获取正确的索引。
function sortDates() {
var i, sort = [];
for (i = 0; i < data.length; i++) {
sort[data[i].cat] = sort[data[i].cat] || [];
sort[data[i].cat].push(data[i].id);
}
return sort;
}
var data = [{ cat: 0, id: "AAAA" }, { cat: 0, id: "BBBB" }, { cat: 1, id: "CCCC" }, { cat: 1, id: "DDDD" }, { cat: 1, id: "EEEE" }, { cat: 1, id: "FFFF" }, { cat: 1, id: "GGGG" }, { cat: 2, id: "HHHH" }, { cat: 2, id: "IIII" }, { cat: 2, id: "JJJJ" }, { cat: 3, id: "KKKK" }],
result = sortDates(data);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- reactjs - 你可以创建一个 react redux store 拦截器来监视一个属性吗?
- java - 我需要建议在字符串中拆分单词和特殊字符
- integer - 在 Python 中,如何用其他整数替换列表中的某些整数?
- java - 尽管有nullpointerexception,如何让android on click listener工作
- javascript - 使用 JavaScript 进行动态表单选择
- javascript - 将表单值分配给付款指令的角度
- confluence - 在 Attlassian Confluence 中创建 Confluence 页面
- bash - cURL 要求输入密码 (Bash)
- javascript - 将对象与数组进行比较并返回匹配的
- r - 来自 TS 的 HoltWinters 错误“xy.coords(x, y) 中的错误:'x' 和 'y' 长度不同”