2015-06-06 3 views
1

У меня есть список фильтров, которые будут применяться к набору данных, используя простой цикл key:value. Когда пользователь выбирает фильтр, создается новый объект с этими key:value парами. Однако, если есть 4 фильтра, и пользователь выбрал только 1-й и 3-й элементы фильтра, новый объект, который создается структурирована следующим образом:Javascript Object.length на основе ключа последнего объекта

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

Когда я звоню newObject.length, он возвращает 3. Смотрите следующее из Devtools Chrome:

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 вернуть число объектов в моем объекте?

+0

Объект-примечание по умолчанию не имеет свойства 'length'. Массивы. – Oriol

ответ

1

Вы используете [] как объект. length должен предоставить вам самый высокий индекс независимо от количества свойств. Вместо этого я переключился бы на использование объекта:

var selected = {}; 
selected[key] = { 
    "value": getInputs[key]["value"], 
    "id": getInputs[key]["id"] 
}; 
Object.keys(selected).length; 
Смежные вопросы