【问题标题】:Find all elements of specific object from object array从对象数组中查找特定对象的所有元素
【发布时间】:2014-05-01 10:06:50
【问题描述】:

我已经发布了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 时,谁能告诉我如何解决这个问题。

谢谢。

【问题讨论】:

  • 您在看哪个控制台?您应该添加屏幕截图或 JSBin 示例。您的上述数据令人困惑,因为不清楚结果中是否有一个包含所有课程的数组。如果您使用的是 Chrome,那么您应该能够扩展关卡并添加您看到的屏幕截图。
  • @ShitalShah 我得到这些是因为 'console.log()' 的结果,这也是从服务器端完成的(某种 rpc 调用)。不幸的是,我无法创建小提琴。不,result 中没有数组,result 本身就是一个对象。
  • 嗯...您的 javascript-object “结果”的结构肯定是错误的..如果您可以提供正确的 json-object,您肯定会得到帮助

标签: jquery object associative-array


【解决方案1】:

我不确定这是您在场景中的确切对象层次结构,但是:

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

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 需要一个数组 - o 是我的对象数组,其结构为 result -> course -> name, list, other, id。

然后,Grep 循环遍历数组的每个元素——数组的每个元素都是一个具有单个属性的对象——“结果”——其内容又是一个“课程”对象,其属性最终是名称、列表, 其他和 id。

这就是我在 grep 中访问 e.result.course.name 的原因。

希望这能有所启发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2021-08-16
    • 2019-02-18
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多