Полагаю, вы можете найти какой-то способ сделать это, используя $.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(", ");
}