我有一个使用简单key:value
循环应用于数据集的过滤器列表。当用户选择过滤器时,将使用这些key:value
对创建新对象。但是,如果有4个过滤器,并且用户只选择了第1个和第3个过滤器项,则创建的新对象的结构如下:
var newObject = {
0: {
key: value,
},
2: {
key: value,
}
}
当我致电newObject.length
时,会返回3
。请参阅Chrome devtools中的以下内容:
Object.length
似乎是基于对象中的最后一个键,而不是对象本身的数量。如何让newObject.length
返回2而不是3?
这是我的函数,它根据过滤器创建对象:
selectedInModel: function() {
var selected = [];
var getInputs = inputService.primaryInputs; // returns filter object
for (var key in getInputs) {
if (getInputs[key]["value"]) {
selected[key] = {
"value": getInputs[key]["value"],
"id": getInputs[key]["id"]
};
}
}
return selected;
};
如何让Object.length
返回对象中号的对象?
答案 0 :(得分:1)
您正在使用[]
作为对象。无论有多少属性,length
都应该为您提供最高的索引。我会转而使用一个对象:
var selected = {};
selected[key] = {
"value": getInputs[key]["value"],
"id": getInputs[key]["id"]
};
Object.keys(selected).length;