javascript - 按索引位置解析json对象数组

标签 javascript jquery json parsing object

我正在解析一个 json 对象数组,以便如果值 = 'y',键列表将作为逗号分隔列表返回,该列表是一个将在 html 中返回的变量。

我想按索引位置引用键/值对,因为我只想返回键/值 #13-39 的值。

关于解决这个问题的最佳方法有什么建议吗?

我已经有一个 jquery 映射函数来通过(即 obj.address)访问一些属性。但我无法成功使用filter或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"}}

感谢您的帮助!

最佳答案

我想你可以想出一些方法来使用 jQuery 的 $.map 来做到这一点,但就我个人而言,我发现用纯 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(", ");
}

关于javascript - 按索引位置解析json对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6418530/

相关文章:

javascript - 折叠表格适用于页面上的所有表格

javascript - 运行 jQuery,重新加载,冲洗并重复......如何?

java - 在 JSON 数组中查找 JSON 对象

json - 有没有更简单的方法来使用 net/http 实现 JSON REST 服务?

javascript - for 循环中的粘性/静态变量引用

javascript - 如何从 OrientDB 中自定义 javascript 函数内的 JSON 提取 db.command 查询的结果

javascript - Jquery 在函数中触发两次

C# 桌面应用程序不共享我的物理位置

javascript - 附加了 jquery 的内容不是 DOM 的一部分

c# - Json.Net JsonConvert.SerializeObject json 不正确