анализ массива объектов json по позиции индекса - PullRequest
1 голос
/ 21 июня 2011

Я работаю над анализом массива объектов json, чтобы при значении = 'y' список ключей возвращался в виде списка через запятую, который является переменной, которая будет возвращена в html.

Я хочу сослаться на пары ключ / значение по позиции индекса, потому что я хочу только вернуть значения, которые являются ключом / значениями # 13-39.

Любые предложения о том, как лучше всего это сделать?

У меня уже есть функция карты jquery для доступа к некоторым свойствам через (например, obj.address). Но я не смог успешно использовать фильтр или grep для выбора свойств объекта только с определенными именами ключей или индексными позициями.

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

[{"Name": "Name1", "Key1": "Y", "Key2": "Y", "Key3": "N", "Key4": "Y", "Key5": "N"},
{"Name": "Name2", "Key1": "N", "Key2": "Y", "Key3": "Y", "Key4": "N", "Key5": "N"},
{"Name": "Name3", "Key1": "N", "Key2": "Y", "Key3": "Y", "Key4": "Y", "Key5": "Y"}}

Спасибо за любую помощь!

1 Ответ

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

Полагаю, вы можете найти какой-то способ сделать это, используя $.map в jQuery, но лично мне просто легче думать чистым JavaScript-способом. (Обратите внимание, что если ваши ключи на самом деле не называются "Key1", "Key2" и т. Д., Но вы хотите получить доступ к ключам по их положению в ассоциативном массиве, это не имеет надежной реализации в разных браузерах.)

var bar = [
  {"Name": "Name1", "Key1": "Y", "Key2": "Y", "Key3": "N",
                    "Key4": "Y", "Key5": "N"},
  {"Name": "Name2", "Key1": "N", "Key2": "Y", "Key3": "Y",
                    "Key4": "N", "Key5": "N"},
  {"Name": "Name3", "Key1": "N", "Key2": "Y", "Key3": "Y",
                    "Key4": "Y", "Key5": "Y"}
];
var parsed = {}; // this contains the result
var MIN_KEY = 2; // set to 13 for your request
var MAX_KEY = 4; // set to 39 for your request

for (var i = 0, iLen = bar.length; i < iLen; i++) {
  var baz = bar[i];
  var name;
  var temp = [];
  for (var key in baz) {
    var keyNum = parseInt(key.replace("Key", ""));

    // Get the name or add valid key to an array
    if (key === "Name") {
      name = baz[key];
    } else if (baz[key] === "Y" && keyNum >= MIN_KEY && keyNum < MAX_KEY) {
      temp.push(key);
    }
  }

  // Concatenates temp array like "Key1, Key2, Key3"
  parsed[name] = temp.join(", ");
}

console.log(bar);
console.log(parsed);

Альтернативная реализация путем подсчета ключей (обратите внимание, что это может быть ненадежно в разных браузерах):

for (var i = 0, iLen = bar.length; i < iLen; i++) {
  var counter = 0;
  var baz = bar[i];
  var name;
  var temp = [];
  for (var key in baz) {
    if (key === "Name") {
      name = baz[key];
    } else if (baz[key] === "Y" && counter >= MIN_KEY && counter < MAX_KEY) {
      temp.push(key);
    }
    counter++;
  }
  parsed[name] = temp.join(", ");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...