我有一个来自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]
}
]
我想在一个对象中返回一个包含相同name
和id
的对象的数组。
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]
}]
答案 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;
答案 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>");