Подсчет количества свойств объекта с помощью фильтра имен - PullRequest
0 голосов
/ 13 ноября 2011

У меня есть объект, который выглядит так:

{a: 1, b:2, c:3, cp1:6, cp2:7 cp3:8, cp4:9}

Меня интересует количество экземпляров cpX в моем объекте, есть ли простой способ в Javascript (или jQuery) подсчитать количество вхождений, соответствующих шаблону. Что-то вроде:

Object.keys(myObj,/cp\d+/).length();

Я знаю, что могу итерировать сам, но я не удивлюсь, если эта функция уже есть.

Ответы [ 3 ]

2 голосов
/ 13 ноября 2011

это может сделать это

var obj={a: 1, b:2, c:3, cp1:6, cp2:7 cp3:8, cp4:9};
var num=0;
for (var key in obj) {
  if (/^cp/.test(key)) {
    ++num;
  }
}
alert(num);

вы могли бы сделать это, используя карты, но я не уверен, что для этого есть нативная функциональность

1 голос
/ 13 ноября 2011

Object.keys() не поддерживает фильтрацию элементов массива. Но вы можете использовать функцию jQuery grep() для фильтрации ваших ключей.

Это работает:

var x = {a: 1, b:2, c:3, cp1:6, cp2:7, cp3:8, cp4:9};
var cpItemsLength = $.grep(Object.keys(x), function(n) { 
    return /cp\d+/.test(n);
}).length;
1 голос
/ 13 ноября 2011

Специальных функций в чистом javascript нет ... Объекты и массивы настолько бедны ...

Для этих целей вы можете использовать подчеркивание lib .

Код будет следующим:

$(function(){
  var a = {a: 1, b:2, c:3, cp1:6, cp2:7, cp3:8, cp4:9};
  var result = _(a).chain().keys().select(function(key){ return key.match(/^cp/);}).value().length;
  $('#results').html(result);
});

Попробуйте здесь .

...