2014-11-17 2 views
1

У меня есть объект JS/ассоциативный массив с некоторыми значениями:Counting Длина объекта на основе значения ключа

var array =[ 
{val:1,ref:10,rule:100}, 
{val:1,ref:12,rule:120}, 
{val:2,ref:13,rule:165}, 
]; 

И я хочу, чтобы выполнить .Length, но хочу, чтобы иметь возможность ломтика на основе одного из (например, val == 1). Я хочу длину значений с val 1, а не длину всего объекта. Я просмотрел справочные материалы и не смог найти удовлетворительного ответа, и я не уверен, насколько это возможно.

array.val==1.length = 2 

Что-то в этом роде ...

+1

[Вы ищете метод Array '.filter()'. (Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) – Pointy

ответ

3

Вы хотите .filter массив для элементов, которые соответствуют определённому предиката:

var filteredArray = array.filter(function(element) { return element.val == 1 }) 
filteredArray.length // = 2 

filter применяет функцию обратного вызова к каждому элементу в массив и новый фильтрованный массив содержат все элементы из исходного массива, для которых возвращена функция обратного вызова фильтра true. Здесь функция возвращает true для всех элементов с свойством val1.

+0

Это работало намного лучше, чем запутанный кусочек, который я пытался использовать, высоко оценил. – hexadec0079

1

Вы должны использовать .filter():

array.filter(function(v){return v.val==1}).length