1

我想在数组中的对象中获取数组。

原始结构:
Array [ object, ..., object ]

var dateC = [ 
      {
      key: "2016-01-01",
      values: **[
        {city:"", country:""...},
        {...}
      ]**},
      {
      key: "2016-01-02",
      values: [
        {...},
        {...}
      ]}
]

var dateC2 = dateC.filter(function(d) { return d.key == selected; }).map(function(d) { return d.values })

我使用上面的代码从 dateC 中提取了具有键的对象:“2016-01-01”。

当前结构:
Array [ Array[114] ]

var dateC2 = [ 
  {
  key: "2016-01-01",
  values: **[
    {city:"", country:""...},
    {...}
  ]**}
]

所需结构:
Array [ Object, ..., Object ]

**[{city:"", country:""...}, {...}]**

我想要的数组包含在**中

我不确定我应该如何使用forEach方法从值中获取数组,因为我已经在 dateC 上使用过滤器和映射来获取 dateC2。或者,是否有更快的方法从原始结构中获得所需的结构?

4

2 回答 2

4

您可以使用单个循环来使用Array#reduce.

var dateC2 = dateC.reduce(function(r, d) {
    return d.key == selected ? 
        r.concat(d.values):
        r;
}, []);
于 2016-07-04T08:28:24.187 回答
1

我认为Array.prototype.forEach将是另一种选择:

var dateC2 = [];
dateC.forEach(function(d) {
    if(d.key == selected)
         dateC2 = dateC2.concat(d.values);
});

或者

var dateC2 = [];
dateC.forEach(function(d) {
    if(d.key == selected)
        Array.prototype.push.apply(dateC2, d.values);
});
于 2016-07-04T19:16:18.533 回答