从复杂数组中检索对象

时间:2017-10-26 14:14:04

标签: javascript arrays json

我有这个数组:

var hemicycle = {

    Group1 : [{
      GroupName : "Les bests",
        Member1 : [{
            Name : "Loris Plasson",
            Seat : 4,
            Vignette : "PhotoURL"
        }],
        Member2 : [{
          Name : "Anne-Sophie",
          Seat : 3,
          Vignette : "PhotoURL"
      }]

    }]

我想根据Member1值将对象Member2Seat推送到另一个对象上。

要做到这一点,我认为我需要"搜索"对于带有for循环的Seat值并检索对象,但我在StackOverflow上找到的所有示例都是这样的简单数组:

var array = [
    { name:"string 1", value:"this", other: "that" },
    { name:"string 2", value:"this", other: "that" }
];

使用这些简单的数组,他们可以使用像{for循环array[i]这样的东西。

但就我而言,我真的不知道该怎么做......

更新:我想要的内容:包含搜索到的相应Seat值的Member对象。然后我将Member对象推送到另一个对象。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您使用的数据结构并不反映您要传达的内容,而且还可以听到遍历的数据结构。

我建议创建一个组数组。每个组都是一个对象,它具有members属性,它是一个成员对象数组:

[{
  "GroupName": "Les bests",
  "members": [{
      "Name": "Loris Plasson",
      "Seat": 4,
      "Vignette": "PhotoURL"
    },
    {
      "Name": "Anne-Sophie",
      "Seat": 3,
      "Vignette": "PhotoURL"
    }
  ]
}]

使用此结构,您可以找到一个使用2 for循环的成员 - 一个用于迭代组,另一个用于迭代每个组的成员。找到成员后,该函数立即返回成员的对象。如果没有返回undefined

var groups = [{"GroupName":"Les bests","members":[{"Name":"Loris Plasson","Seat":4,"Vignette":"PhotoURL"},{"Name":"Anne-Sophie","Seat":3,"Vignette":"PhotoURL"}]}];

var seatNum = 4;

function findMember(seatNum) {
  var members;
  for(var i = 0; i < groups.length; i++) {
    members = groups[i].members;
    for(var j = 0; j < members.length; j++) {
      if(members[j].Seat = seatNum) {
        return members[j];
      }
    }
  }
}

var member = findMember(seatNum);

console.log(member);