使用jquery或javascript从对象数组中查找特定对象的所有元素

时间:2014-03-22 08:05:37

标签: javascript jquery object associative-array

courses = [{
  code: 'English',
  otherFields: '1',
  list: [{id:'1'},{name:'eng'}]
}, {
  code: 'Spanish',
  otherFields: '2',
  list: [{id:'2'},{name:'spa'}]
}, {
  code: 'German',
  otherFields: '3',
  list: [{id:'3'},{name:'ger'}]
}]

 var resultSet = $.grep(courses.list, function (e) {
 return e.code.indexOf('German') == 0;
});

console.log(JSON.stringify(resultSet));

我想要的是:基于'name'参数我希望获得该特定对象中的所有内容。示例:当我传递name = spa时,我应该得到'id = 2,name = spa'。使用上面的代码我得到的结果是未定义的。

我检查this question,但没有多大帮助。请帮忙。

修改

对不起朋友,但我真的很困惑。下面是我可以在控制台中看到的代码(它来自服务器,所以我不知道它是如何实际构建的。)

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  

当我使用result.course.id时,我正在1。我想要的是根据特定的course(西班牙语或英语)将整个内容放在name内。我跳了,我现在明确了。

很抱歉您之前遇到的不便之处。请帮忙。

2 个答案:

答案 0 :(得分:0)

您使用jQuery.grep()走在正确的轨道上,但没有正确使用它。

你能做的是:

$.grep(courses, function(e) { return e.list[1].name == 'spa'; })

或更一般地说:

function find(name) {
    return $.grep(courses, function(e) { return e.list[1].name == name; });
}

它将返回courses数组中与给定name匹配的所有元素。

答案 1 :(得分:0)

我为你写了一个函数。您可以通过以下方式完成: -

function FindCourse(code) {
        for (var i = 0; i < courses.length; i++) {

            if (courses[i].list[1].name === code) {
                alert(courses[i].code);
                alert(courses[i].otherFields);
                alert(courses[i].list[0].id);
                alert(courses[i].list[1].name);
            }
        }
    }

请参阅小提琴 - http://jsfiddle.net/rMECV/4/