我正在尝试将我的脚本放在一起组成一个多维数组。这通常不应该是一个问题,但由于某种原因,一切都在这里失败,我不知道为什么。
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]
它给了我一个结构。所以我完全迷失了。
答案 0 :(得分:1)
如果你想像“PHP”这样的其他动态语言使用“关联数组”,那么Array对象应该有数字索引。而是将其声明为new Array()
或同一a = []
尝试使用a = {}
。这将允许您使用“命名”索引。
此外,使用.map()
似乎可以根据您的需要进行调整,这可以稍微提高代码的易读性。
这里有更多背景,是数组的MDN文档:
有些人认为你不应该使用数组作为关联数组。在任何情况下,您都可以使用普通对象,尽管这样做有其自身的警告。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Description