Javascript/ES6:在JSON对象中按元素插入分组
我从API接收一个JSON对象,比如:Javascript/ES6:在JSON对象中按元素插入分组,javascript,ecmascript-6,vuetify.js,Javascript,Ecmascript 6,Vuetify.js,我从API接收一个JSON对象,比如: { "BuchungsvorgangKategorieId": 1, "BuchungsvorgangKategorie": "Miete", "Group": "Ideeller Bereich" }, { "BuchungsvorgangKategorieId": 2, "BuchungsvorgangKategorie": "Taiko-Beitrag", "Group
{
"BuchungsvorgangKategorieId": 1,
"BuchungsvorgangKategorie": "Miete",
"Group": "Ideeller Bereich"
},
{
"BuchungsvorgangKategorieId": 2,
"BuchungsvorgangKategorie": "Taiko-Beitrag",
"Group": "Ideeller Bereich"
},
{
"BuchungsvorgangKategorieId": 5,
"BuchungsvorgangKategorie": "Jahresbeitrag",
"Group": "Ideeller Bereich"
},
{
"BuchungsvorgangKategorieId": 3,
"BuchungsvorgangKategorie": "Reisekosten (Auftritt)",
"Group": "Zweckbetrieb"
},
{
"BuchungsvorgangKategorieId": 4,
"BuchungsvorgangKategorie": "Auftritt",
"Group": "Zweckbetrieb"
},
现在,当使用Vuetify选择时,有一个按某个标题分组的选项。因此,我想将我的结果转化为:
{header: "Ideller Bereich" },
{
"BuchungsvorgangKategorieId": 1,
"BuchungsvorgangKategorie": "Miete",
"Group": "Ideeller Bereich"
},
{
"BuchungsvorgangKategorieId": 2,
"BuchungsvorgangKategorie": "Monatsbeitrag",
"Group": "Ideeller Bereich"
},
{
"BuchungsvorgangKategorieId": 5,
"BuchungsvorgangKategorie": "Jahresbeitrag",
"Group": "Ideeller Bereich"
},
{header: Zweckbetrieb },
{
"BuchungsvorgangKategorieId": 3,
"BuchungsvorgangKategorie": "Reisekosten",
"Group": "Zweckbetrieb"
},
{
"BuchungsvorgangKategorieId": 4,
"BuchungsvorgangKategorie": "Auftritt",
"Group": "Zweckbetrieb"
}
我想我应该在对象数组中循环(arr.map?),并有一个check变量,它最初是空的。始终如果组的当前值与检查变量不同,我需要更新检查变量,并在当前项目(arr.splice?)之前的位置插入新值
更新:
多亏@trincot和@Natixco的评论帮助我进一步调查,我才能够创建这段代码:
let checkVariable = ""
this.FilterKategorien.forEach((item,index) => { //this.FilterKategorien contained the records from the API.
if(item.Group!=checkVariable) {
this.FilterKategorien.splice(index,0,{header: item.Group})
checkVariable=item.Group
}
})
console.log(this.FilterKategorien)
我只需要创建一个新数组;您始终可以将其分配回原始变量:
let grouped = data.reduce((acc, item, i) =>
!i || acc[acc.length-1].Group !== item.Group
? acc.concat({header: item.Group}, item)
: acc.concat(item)
, []);
如果确实需要对原始数组进行变异,也可以使用上述方法,并将其拼接到原始数组中:
data.splice(0, data.length, ...data.reduce((acc, item, i) =>
!i || acc[acc.length-1].Group !== item.Group
? acc.concat({header: item.Group}, item)
: acc.concat(item)
, []));
这不是有效的JSON。你可能说的是数组…?没错,但如果你不需要新的数组,我会使用foreach。好吧,你在最后一段中的假设是正确的。你试过了吗?是的,我现在试过了。。。感谢您向正确的方向推进:让checkVariable=”“this.FilterKategorien.forEach((项,索引)=>{if(项.BuchungsvorgangSteuerzuordnung!=checkVariable){this.FilterKategorien.splice(索引,0,{header:item.BuchungsvorgangSteuerzuordnung})checkVariable=item.BuchungsvorgangSteuerzuordnung})console.log(this.FilterKategorien),因此需要修改数组;没有创建一个新的吗?谢谢tincot。看到完全不同的方法很有趣。感谢您介绍我以前从未使用过的concat:-)我正在考虑关于这个片段的解决方案:!i | | acc[acc.length-1]。组!==项目组!我的意思是:如果没有,我就做点什么。为什么我需要这个?`在第一次迭代中,我等于0,对吗?所以它已经不同于未定义的…
!当i
为0时,i
为false<代码>!i强制i
为布尔值,因此它要么为false,要么为true。