javascript - 遍历 JSON,在对象之间插入键/值?

标签 javascript jquery json

更新 - 感谢所有出色的回答和令人难以置信的快速响应。我从建议的解决方案中学到了很多东西。我最终选择了我所做的答案,因为结果完全符合我的要求,而且我能够以最小的努力让它在我的应用程序中工作——包括搜索功能。该站点是开发人员的宝贵资源。


可能是一项简单的任务,但我似乎无法正常工作,也无法在 Google 上找到任何内容。我是一个 Javascript 新手,复杂的 JSON 让我很困惑。我想做的是为我们公司制作一个 PhoneGap 应用程序(电话目录)。我将尝试解释我的推理并在下面说明我的尝试。

我有以下格式的所有员工的 JSON 数据:

[  
  {  
    "id":"1",
    "firstname":"John",
    "lastname":"Apple",
    "jobtitle":"Engineer"
  },
  {  
    "id":"2",
    "firstname":"Mark",
    "lastname":"Banana",
    "jobtitle":"Artist"
  },
  ... and so on
]

我正在使用的移动框架(框架 7)提供了一个 "Virtual List"我需要利用的解决方案,因为我们的目录相当大。虚拟列表要求您知道每个列表项的确切高度,但是,您可以使用函数来设置动态高度。

我想做的是根据他们的姓氏为按字母顺序排列的列表创建“标题”。 JSON 数据必须这样重组:

[  
  {
    "title":"A"
  },
  {  
    "id":"1",
    "firstname":"John",
    "lastname":"Apple",
    "jobtitle":"Engineer"
  },
  {
    "title":"B"
  },
  {  
    "id":"2",
    "firstname":"Mark",
    "lastname":"Banana",
    "jobtitle":"Artist"
  },
  ... and so on
]

我已经能够使用 for 循环将键/值对添加到数据中的现有对象:

var letter, newLetter;
for(var i = 0; i < data.length; i++) {
    newLetter = data[i].lastname.charAt(0);
    if(letter != newLetter) {
        letter = newLetter
        data[i].title = letter;
    }
}

此解决方案更改了 JSON,从而输出连接到列表项的标题栏(虚拟列表仅接受一个 <li></li>,因此标题栏是该栏内的一个 div):

{  
  "id":"1",
  "firstname":"John",
  "lastname":"Apple",
  "jobtitle":"Engineer",
  "title":"A"
},
{  
  "id":"1",
  "firstname":"Mike",
  "lastname":"Apricot",
  "jobtitle":"Engineer",
  "title":""
}

在我尝试对列表实现搜索功能之前,此解决方案一直有效。当我搜索时,它按预期工作,但看起来损坏了,因为标题标题(“A”、“B”等...)连接到以特定字母顺序部分开头的列表项。出于这个原因,我需要能够将标题与现有元素分开,并将它们用于动态高度/从搜索结果中排除。

问题:如何做一个 for 循环,在新字母分组的开头插入 [prepends] 一个新对象 (title:letter)?如果有更好的方法,请赐教。正如我提到的,我是一名 JS 新手,我希望成为更高效的 Web 应用程序编程人员。

最佳答案

var items = [  
  { "lastname":"Apple" },
  { "lastname":"Banana" },
  { "lastname":"Box"  },
  { "lastname":"Bump" },
  { "lastname":"Can" },
  { "lastname":"Switch" }
];
  
var lastC = null;  //holds current title
var updated = [];  //where the updated array will live
for( var i=0;i<items.length;i++) {
  var val = items[i];  //get current item
  var firstLetter = val.lastname.substr(0,1);  //grab first letter
  if (firstLetter!==lastC) {  //if current title does not match first letter than add new title
    updated.push({title:firstLetter});  //push title
    lastC = firstLetter;  //update heading
  }
  updated.push(val);  //push current index
}
console.log(updated);

关于javascript - 遍历 JSON,在对象之间插入键/值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27622444/

相关文章:

javascript - 如何覆盖 AG Grid 中的内置 Excel 导出功能

javascript - Node.js:按下提交按钮时如何将公式的输入值写入 JSON 文件?

jquery - 如何获取Json对象数组值?

java - 如何识别文件类型是 json 数据还是 json 模式

c# - 将 JSON 字符串转换为有意义的完整数据进行解析

javascript - 使用超时在 JavaScript 中请求 POST

jquery - 检查 body 负荷(或其他要素)

javascript - 简单的谷歌浏览器扩展来检测网页上的点击 - 没有显示警报(错误)

javascript - 我应该如何在 for 循环中使用 JavaScript 访问 JSON?

javascript - 如何在物化日期选择器中设置日期