从对象数组中查找特定对象的所有元素

时间:2014-03-24 06:55:54

标签: jquery object associative-array

我发布了question here,但没有得到任何对我有用的答案(可能我对我的问题不够清楚)。所以我再次在这里发布了我想要的内容。

以下是我可以在控制台中看到的代码(它来自服务器,所以我不知道它是如何实际构建的)。

result : {Object}
 course : {Object}
  name : English
  list : {Object}
   1 : {Object}
     attr1 : value1
     attr2 : value2
   3 : {Object}
     attr1 : value1
     attr2 : value2
  other : value-other
  id : 1
 course : {Object}
  name : Spanish
  list : {Object}
   1 : {Object}
     attr1 : value1
     attr2 : value2
   3 : {Object}
     attr1 : value1
     attr2 : value2
  other : value-other
  id : 2  

基于此,我想结构将是:

results = {
  other: 'something',
  id: '1',
  courses: {list:{...},name:'English'}
  }, {
  other: 'again-something',
  id: '2',
  courses: {list:{...},name:'Spanish'}
  }, {
  other: 'again-something',
  id: '3',
  courses: {list:{...},name:'German'}
};

我想要的是:获取result.course result.course.name = 'Spanish'

的所有元素

我尝试了以下代码,但它返回一个空数组:

var test = $.grep(result, function(e) { return e.courses.name == 'Spanish'; });
console.log(JSON.stringify(test));

我想问题是result本身是一个对象,而不是一个数组。如果它是result = [{...}];那么代码可以运行。

result本身是object时,有人可以告诉我如何解决这个问题。

感谢。

1 个答案:

答案 0 :(得分:0)

我不确定这是您的方案中的确切对象层次结构,但是:

我创建了一个对象数组,如下所示:

var o = [{
  result: {
    course: { 
       name: "English",
       list: [{ attr1: "v1", attr2: "v2" }, { attr1: "v5", attr2: "v6" }],
       other: "value-other",
       id: "1"
    }
  }
},
{
  result: {
    course: { 
       name: "Spanish",
       list: [{ attr1: "v1", attr2: "v2" }, { attr1: "v5", attr2: "v6" }],
       other: "value-other",
       id: "1"
    }
  }
},
{
  result: {
    course: { 
       name: "French",
       list: [{ attr1: "v1", attr2: "v2" }, { attr1: "v5", attr2: "v6" }],
       other: "value-other",
       id: "1"
    }
  }
}]

执行var test = $.grep(o, function(e) { return e.result.course.name == "Spanish"; } );会返回课程名称为西班牙语的对象(我的数组中的第二个元素)。

Grep期望一个数组 - 是我的结果对象数组 - >当然 - > name,list,other,id。

Grep然后循环遍历数组的每个元素 - 数组的每个元素都是一个具有单个属性的对象 - "结果" - 反过来,哪些内容是"课程"对象,哪些属性最终是name,list,other和id。

这就是为什么在grep中我访问e.result.course.name。

希望这会有所启发。