Javascript Object.length基于最后一个对象的键

时间:2015-06-06 17:22:38

标签: javascript loops object

我有一个使用简单key:value循环应用于数据集的过滤器列表。当用户选择过滤器时,将使用这些key:value对创建新对象。但是,如果有4个过滤器,并且用户只选择了第1个和第3个过滤器项,则创建的新对象的结构如下:

var newObject = {
  0: {
    key: value,
  },
  2: {
    key: value,
  }
}

当我致电newObject.length时,会返回3。请参阅Chrome devtools中的以下内容:

devtools object description

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返回对象中的对象?

1 个答案:

答案 0 :(得分:1)

您正在使用[]作为对象。无论有多少属性,length都应该为您提供最高的索引。我会转而使用一个对象:

var selected = {};
selected[key] = {
    "value": getInputs[key]["value"],
    "id": getInputs[key]["id"]
};
Object.keys(selected).length;