即使正在设置索引,Array也会显示null

时间:2016-07-19 16:33:36

标签: javascript arrays

我正在尝试将我的脚本放在一起组成一个多维数组。这通常不应该是一个问题,但由于某种原因,一切都在这里失败,我不知道为什么。

function getProducts(products){
    var allProducts = new Array();
    for(var p in products) if(products[p]){
        var groupName = products[p].otherGroupName;
        var code = (products[p].code.split("."))[0];
        if( !(products[p].commonName.length==0 && groupName=="") ){
            if(groupName=="") {
                groupName="Custom Admin Products";
            }
            if(!(groupName in allProducts)) {
                allProducts[groupName] = new Array();
            }
            var np = {};
            np.commonName = products[p].commonName;
            np.code = code;
            allProducts[groupName][np.code] = np;
        }
    }
    console.log(allProducts);
}

products的参数是一个对象。您还会在第二行到最后一行看到我尝试记录数组,它应该被填充,但它会在日志中显示'[]'。如果我记录allProducts[groupName][np.code]它给了我一个结构。所以我完全迷失了。

1 个答案:

答案 0 :(得分:1)

如果你想像“PHP”这样的其他动态语言使用“关联数组”,那么Array对象应该有数字索引。而是将其声明为new Array()或同一a = []尝试使用a = {}。这将允许您使用“命名”索引。

此外,使用.map()似乎可以根据您的需要进行调整,这可以稍微提高代码的易读性。

这里有更多背景,是数组的MDN文档:

  

有些人认为你不应该使用数组作为关联数组。在任何情况下,您都可以使用普通对象,尽管这样做有其自身的警告。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Description