0

我正在尝试计算动态生成的数组中的属性。数组程序是在对象内部创建的,如下所示:

state_list.push({name: state, undergrad: 0, grad: 0, total: 0, programs: []});

然后后者是这样填充的:

n = findWithAttr(state_list, 'name', state);
//n = the index of property "name" with value of "state" in state_list
if(!(program in state_list[n]["programs"])) {           
state_list[n]["programs"][program] = 1;
} else {
state_list[n]["programs"][program]++;
}

接下来,我需要汇总已放置在数组中的程序数量,并希望这样做:

programs = state.programs;
console.log(programs.length);

但这返回 0。

如果我登录(程序),这是数组:

Array[0]
History, MA: 3
Info Assurance & Security, MS: 1
International Literacy, MED: 1
length: 0
__proto__: Array[0]
main.js:237

似乎它将数组中的所有程序作为一个字符串......或其他东西。我很想将它们编入索引并能够迭代它们。有什么建议么?

4

2 回答 2

1
programs = state.programs;
console.log(programs.length);

如果 state 引用 state_list 数组中的对象,将正确返回数组的长度。

我的猜测是,program在您的代码中不是数字,并且程序被插入为对象属性而不是数组索引。只有当您实际上在表单程序 [] 中添加内容时,长度才会增加。如果program是非数字字符串,您将编辑数组的属性而不是索引,并且这些不会增加长度。

于 2013-03-27T20:08:46.680 回答
0

好的,这就是我最终要做的:

programs = state.programs;
keys = Object.keys(programs);
//this creates an indexed array of each property in programs
size = keys.length;
//this gives me the length of the new array, which I can use for pagination

然后我能够像这样迭代它们:

offset = 0;
results = 24;
start = 0;              
$(keys).each(function() {
   if((start >= offset)&&(start < (offset+results))) {
   //this conditional gives me the pagination   
      $("#programResult").append("<li>"+this+": "+programs[this]+"</li>");
   }
   start++;
});

这给了我一个结果,如下所示:“历史,MA:1”

于 2013-04-01T21:09:11.373 回答