JSON JQuery фильтр Javascript массив - PullRequest
1 голос
/ 14 июня 2011

У меня есть массив объектов json. Я хочу выполнить поиск в массиве и для каждого объекта создать список «сервисов», который представляет собой разделенный запятыми список всех ключей, имеющих значение «да». Список объектов json со списком сервисов затем отображается в html с использованием каждого jquery.

Это большой файл json, поэтому я хочу сделать это максимально эффективно.

У меня уже есть свойства объекта, доступ к которым осуществляется через каждый jQuery (т. Е. Obj.name). - так что я думаю, что должна быть возможность фильтровать сервисы, перечисленные для каждого объекта, используя Фильтр jQuery, а затем отобразите ключ, если значение равно yes.

Но, похоже, более эффективным вариантом, вероятно, было бы создание нового массива javascript, присоединение сервисов со значением yes, а затем добавление этой переменной в html. прилагается.

Я не уверен, что было бы быстрее и до сих пор не было очень успешным в любом ... так что любые советы и примеры были бы очень полезны.

Вот как выглядит массив json:

[
 {"name":"name1",
  "service1":"y",
  "service2":"y",
  "service3":"n",
 },

 {"name":"name2",
  "service1":"n",
  "service2":"y",
  "service3":"n",
 },
];

Ответы [ 3 ]

4 голосов
/ 14 июня 2011

Если вы просто хотите отфильтровать массив, используйте grep.

grep - Находит элементы массива, которые удовлетворяют функции фильтра. Исходный массив не затрагивается.

http://api.jquery.com/jQuery.grep/

2 голосов
/ 14 июня 2011

Во-первых, удалите запятые. Internet Explorer становится очень, очень запутанным ими. В любом случае, я предполагаю, что вы не хотите «искать» в массиве, когда говорите «для каждого значения»; Вы хотите перебрать массив и разобрать его в более удобный список. Первый метод, который я бы предложил, это просто передать то, что вы хотите, в качестве массива, который вы хотите, но если это не вариант, то вам нужен какой-то вариант, который должен быть довольно эффективным ( jsFiddle пример ):

var json = [
  {"name":"name1", "service1":"y", "service2":"y", "service3":"n"},
  {"name":"name2", "service1":"n", "service2":"y", "service3":"n"}
];
var parsed = {};

for (var i = 0, iLen = json.length; i < iLen; i++) {
  // Assuming all we need are the name and a list
  var name;
  var list = [];

  for (var key in json[i]) {
    var value = json[i][key];

    // We need to hold on to the name or any services with value "y"        
    if (key === "name") {
      name = value;
    } else if (value === "y") {
      list.push(key);
    }
  }

  // Add them to the parsed array however you'd like
  // I'm assuming you want to just list them in plain text
  parsed[name] = list.join(", ");
}

// List them on the web page
for (var key in parsed) {
  document.write(key + ": " + parsed[key] + "<br>");
}

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

0 голосов
/ 14 июня 2011

jQuery.inArray () Поиск указанного значения в массиве и возврат его индекса (или -1, если не найден).

http://api.jquery.com/jQuery.inArray/

Или

http://api.jquery.com/jQuery.each/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...