通过数组中对象中的对象 属性 过滤对象数组

Filtering an array of objects by an object property within an object within the array

我在一个嵌套的对象地狱中,在这里。我觉得这个问题有答案,我只是不太明白如何描述正在发生的事情。

所以,我从 REST return(大约 450 多个对象)中获取了这个巨大的对象数组,它们是这样加载的:

results[0] = {  
prop0: "String",  
prop1: "String",  
prop2: bool,  
prop3: Object {  
    prop0: "String"  
}
prop4: "String"  
}

我正在做这件事,首先,我创建了一个对象数组,其中仅包含嵌套对象 属性 中的唯一字符串,以及出现的次数计数字符串出现在数据集中。

我现在需要为每个唯一字符串在原始数据集中创建一个对象数组,其中 results.prop3.prop0 与折叠数组中的字符串匹配。够混乱了吗?

来自这里:

姓名:"Joe",
地点:州 {
状态:"New York"、
},
活着:假
}

为此:

纽约 (120)
乔 - 死了

我已经走到这一步了,使用 underscore.js:

for(index in collapsed){  
var details = _.where(results,{state: {state: collapsed[index][0]}});

console.log(details);

}

但我在某个地方显然是个白痴,因为那只是 return 为折叠数组中的每个东西创建一个空数组。

折叠样本
[{"New York",120},{"Georgia",79},{"Another Place",15}].

我基本上想构建一个 table 数据,在每个位置下面,我加载 Place 与嵌套对象底部的状态字符串一直匹配的对象。

到jm_____的地步,我去试试。

以下是基于_.reduce()_.filter()

的带下划线的数据操作示例

获取包含按状态分组的项目数的折叠数组

var collapsed = _.reduce(response, function(memo, item) {
  if ( ! memo[item.Place.state]) {
    memo[item.Place.state] = 0;
  }
  memo[item.Place.state]++;
  return memo;
}, {});

结果:以状态为键并计数为值的分组对象。

{
  London: 2,
  New York: 4
}

按州获取筛选数据

var filtered = _.filter(response, function(item) {
  return item.Place.state === "New York";
});

结果:只有纽约州的对象数组

Link 到 jsbin 演示