JavaScript中未知大小的多维数组

默认LA

真想尽一切办法...我正在尝试将项目从一个数组排序到另一个数组,但是进行了分类。我的代码当前正在运行,但是麻烦的是我需要知道“ sort”数组的大小。目前,有四个条目与“数据”一起使用。将前两个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]不是函数”。这是因为排序数组中只有四个可用项目。

所以我只是想知道,有什么办法可以解决这个问题?如果数据数组总是在改变大小,并且添加了更多条目/类别,我是否必须继续手动调整排序数组的大小?

妮娜·斯科茨(Nina Scholz)

您可以使用带有逻辑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; }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章