合并数组数据

时间:2016-05-02 08:40:09

标签: javascript jquery arrays

我有一个来自api的JSON数组,其结构如下:

newArray = [
{
 "item":{"id":1, "name":"item1"},
 "type": [1,2,3]
},
{
"item":{"id":2, "name":"item2"},
"type": [4,5]
},
{
"item":{"id":3, "name":"item3"},
"type": [8,9]
},
{
"item":{"id":1, "name":"item1"},
"type": [11,12]
},
{
"item":{"id":2, "name":"item3"},
"type": [31,41]
},
{
"item":{"id":3, "name":"item3"},
"type": [11,23]
}
]

我想在一个对象中返回一个包含相同nameid的对象的数组。

resultArray = [
{
"item":{"id":1, "name":"item1"}, 
"type": [1,2,3,11,12]
},
{
"item":{"id":2, "name":"item2"},
"type": [4,5,31,41]
},
{
"item":{"id":3, "name":"item3"},
"type": [8,9,11,23]
}]

2 个答案:

答案 0 :(得分:2)

这是一个带有Array#forEach()的单循环提案,以及一个用于引用插入项目的辅助对象。



public void activate(ComponentContext componentContext, Map<String,Object> properties)
{
    System.out.println("Sono AstroGUI!!!!");

    Runnable runnable = new Runnable() {
          public void run() {
        createAndShow();
          }
        };
        SwingUtilities.invokeLater(runnable);
}

 static void createAndShow() {


    JFrame frame = new JFrame("Hello World");
    frame.setSize(640,480);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }
&#13;
&#13;
&#13;

答案 1 :(得分:0)

正如我在评论中提到的那样,由于输出是输入Array.prototype.reduce()的简化版本,因此该作业被删除并产生一个非常简单的“可链接”代码。因此,如果您将构造添加到Array原型并进行稍微修改,则可以执行newArray.construct(e => somecode with e).filter(e => somecode with e ).map(e => somecode with e)这对函数式编程至关重要。看看

var newArray = [
{
 "item":{"id":1, "name":"item1"},
 "type": [1,2,3]
},
{
"item":{"id":2, "name":"item2"},
"type": [4,5]
},
{
"item":{"id":3, "name":"item3"},
"type": [8,9]
},
{
"item":{"id":1, "name":"item1"},
"type": [11,12]
},
{
"item":{"id":2, "name":"item3"},
"type": [31,41]
},
{
"item":{"id":3, "name":"item3"},
"type": [11,23]
}
];

function construct(a){
  return a.reduce((p,c) => {var i = p.findIndex(e => e.item.id == c.item.id);
                            !!~i ? p[i].type = p[i].type.concat(c.type) : p.push(c); return p}, []);
}
document.write("<pre>" + JSON.stringify(construct(newArray),null,4) + "</pre>");