Там какие-либо функции jQuery должны запросить многомерные массивы подобным способом к DOM?

Что говорит вопрос...

Делает jQuery, имеют любые методы, которые позволят Вам запрашивать mult-размерный массив объектов подобным способом, как он делает с DOM.

Так, например, получите меня список объектов, содержавших в многомерном массиве, имеющем некоторое значение свойства соответствия - например, где StartOfPeriod, больше, чем указанная дата или где имя == "Алебастр Ben"

Я хотел бы постараться не изобретать велосипед, если уже существует что-то там.

9
задан Reigel 7 July 2010 в 01:14
поделиться

3 ответа

Вы не можете использовать синтаксис селектора, но jQuery поставляется с $.grep и $.inArray, которые могут быть полезны для этого. grep возвращает новый массив элементов, соответствующих предикату. inArray возвращает индекс первого совпадающего элемента или -1. Например:

var matches = $.grep(array, function(el){
  return el.StartOfPeriod > 2000;
});

Эти методы похожи на стандартные методы ECMAScript, Array.filter (аналогично grep) и Array.indexOf (аналогично inArray); jQuery фактически использует Array.indexOf, где это возможно. Есть и другие полезные методы ECMAScript, такие как Array.every (совпадение всех элементов) и Array.some (совпадение хотя бы одного элемента). MDC предлагает код, который вы можете добавить в свой проект, чтобы эти методы работали в браузерах, не имеющих собственных реализаций.

6
ответ дан 4 December 2019 в 21:47
поделиться

Вы можете найти плагин, но не в ядре jQuery. Есть несколько полезных методов массивов: each, unique, inArray. В сочетании с ними вы можете создать нечто индивидуальное, отвечающее вашим потребностям.

То, что вы ищете, больше похоже на библиотеку наборов с xpath-подобным обходом. Prototype имеет гораздо больший набор методов массивов. Но все равно, вероятно, не сможет удовлетворить ваши потребности из коробки.

Я согласен с alex, такая библиотека/расширение было бы интересно.

2
ответ дан 4 December 2019 в 21:47
поделиться

Я только что написал это ... Я думаю, что он работает правильно, но его определенно можно очистить :)

function findMatchingObjects(obj, member, value){
   var final = new Array();
   var temp = new Array();
   for(var p in obj){
    if (typeof obj[p] == 'object' ) {
     temp = findMatchingObjects(obj[p], member, value);
     if (temp.length == 1)
      final.push(temp[0]);
    }
    if (p == member && obj[p] == value) {
     final.push(obj);
    }
   }
   alert(final.length);
   return final;
}

Используйте его так:

var moo ={baz: 1, boo: 2, bar:{c1: 3, c2: 4, c3:{t:true, f:false, baz:1}},d: 11};
var foo = findMatchingObjects(moo, "baz", 1);

// did it work?
console.log(foo);

Возвращает массив объектов (или подобъектов ), которые соответствуют паре член-значение. В этом случае foo содержит как moo , так и c3 , поскольку оба объекта содержат пару baz = 1 .

Чтобы функция выглядела и ощущалась как селектор jQuery, достаточно лишь синтаксического сахара.

1
ответ дан 4 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: