我发布了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
时,有人可以告诉我如何解决这个问题。
感谢。
答案 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。
希望这会有所启发。