jQuery针对单个和多个元素的每个函数

jQuery针对单个和多个元素的每个函数,jquery,json,each,Jquery,Json,Each,我有两种类型的JSON结果: { "person":{ "fname": "Homer", "lname": "Simpson" } } { "person":[ { "fname": "Homer", "lname": "Simpson" }, { "fname": "Marge", "lname": "Simpson" } ] } 我想使用jQuery“each”: 但是当JSON有一个人和多个人时,“我”和“人”是不同的。 我看到

我有两种类型的JSON结果:

{
 "person":{
  "fname": "Homer",
  "lname": "Simpson"
  }
 }

{
 "person":[
  {
  "fname": "Homer",
  "lname": "Simpson"
  },
  {
  "fname": "Marge",
  "lname": "Simpson"
  }
  ]
 }
我想使用jQuery“each”:

但是当JSON有一个人和多个人时,“我”和“人”是不同的。 我看到单人响应没有数组“[]”,但当我:

$.each([response.person], function(i, person){...
那么多人就不起作用了。
我正在寻找一种方法来规范化事物,以便可以一致地使用“each”。

测试它是否是一个数组

$.each(($.isArray(response.person) ? response.person : [response.person]), function(i, person){...
或者,您可以在迭代之前修改对象:

if (!$.isArray(response.person)) {
    response.person = [response.person];
}
$.each(response.person, function(i, person){...

理想情况下,您最初会得到一个数组,但您始终可以
.concat
将结果转换为空数组。这将允许您一致地循环:

$.each([].concat(response.person), function(i, person){...

您是否有办法更改结果的生成方式?这是YQL的响应吗?yql是通过一个结果而不是多个结果来实现的。@bmw0128不过我更喜欢药片的解决方案。我只是从药片中看到了解决方案。这也很好,但我看到了凯文的第一个,我认为他们是相当平等的。使用药片可能更有效,而且需要更少的打字,但最有可能的是一个微型优化。使用容易理解的东西。我不知道能够用
[].concat()
将一个对象转换为一个数组。我知道这是存在的,很难通过谷歌找到我想要的,但它就在这里
$.each([].concat(response.person), function(i, person){...