Merging Two Objects Into Array While Keeping Key Values
如何将两个对象组合成一个数组,同时将键值保留在对象中?我已经找到了合并对象的解决方案,但它们似乎都没有保留键值。
我的代码是制造新车。稍后,我想将我的新车组织成一个数组,能够按车型、车型年份、颜色等组织它们。有些组织逻辑还没有实现,因为我的重点是在数据变得太长之前完成对象合并。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Car { constructor(type, model_year) { this.type = type, this.model_year = model_year } } class Tesla extends Car{ constructor(type, model_year){ super(type, model_year) } } let myTesla1 = new Tesla("Sedan", 2015) let myTesla2 = new Tesla("Coupe", 2014) |
我期望的输出是:
1 2 3 | let teslas = // Here is what I'm failing to implement console.log(teslas) // ["type","Sedan","model_year","2015","type","Coupe","model_year","2014"] |
号
也许我的逻辑错了。我相信有更好的方法来组织这些车,但我也没能搞清楚。
我的尝试
我试图用这样的条目映射对象:
1 2 | let teslas = Object.entries(myTesla1).map(([key, value]) => ({key, value})); console.log(teslas); |
但我的输出并不完全是我想要的,因为它将关键值设置为这样:
1 2 | [ { key: 'type', value: 'Sedan' }, { key: 'model_year', value: 2015 } ] |
。
事先谢谢你的帮助。我对这个还不太熟悉,所以请原谅任何应该做得更好的事情。
使用函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Car { constructor(type, model_year) { this.type = type, this.model_year = model_year } } class Tesla extends Car { constructor(type, model_year) { super(type, model_year) } } let myTesla1 = new Tesla("Sedan", 2015); let myTesla2 = new Tesla("Coupe", 2014); let teslas = []; // Concatenate the entries [key, value] to the accumulator [myTesla1, myTesla2].forEach((obj) => teslas = teslas.concat(Object.entries(obj) .reduce((a, entries) => a.concat(entries), []))); console.log(teslas); |
1 | .as-console-wrapper { max-height: 100% !important; top: 0; } |
号
我将和你的评论一起工作:我确信有更好的方法来组织这些车,但我也没能弄清楚。
我建议您使用一个数组,每辆车一个条目,这个条目是一个键-值对的简单映射。您可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | class Car { constructor(type, model_year) { this.type = type, this.model_year = model_year } } class Tesla extends Car { constructor(type, model_year) { super(type, model_year) } } let myTesla1 = new Tesla("Sedan", 2015) let myTesla2 = new Tesla("Coupe", 2014) const teslas = [myTesla1, myTesla2] const carListWithKeyValues = teslas.map(tesla => Object.assign(tesla)) console.log(carListWithKeyValues) /* output: [ { "type":"Sedan", "model_year": 2015 }, { "type":"Coupe", "model_year": 2014 } ] */ |
您可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Car { constructor(type, model_year) { this.type = type, this.model_year = model_year } } class Tesla extends Car{ constructor(type, model_year){ super(type, model_year) } } const tesla1 = new Tesla("Sedan", 2015); const tesla2 = new Tesla("Coupe", 2014); const teslas = [tesla1, tesla2].reduce((acc, car) => { Object.entries(car).forEach(([key, val]) => acc.push(key, val)); return acc; }, []); console.log(teslas); |
您可以这样使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class Car { constructor(type, model_year) { this.type = type, this.model_year = model_year } } class Tesla extends Car{ constructor(type, model_year){ super(type, model_year) } } let myTesla1 = new Tesla("Sedan", 2015) let myTesla2 = new Tesla("Coupe", 2014) let teslas = [].concat.apply([], Object.entries(myTesla1).concat(Object.entries(myTesla2))); |
。
你也可以用这种简单的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <script type="text/javascript"> class Car { constructor(type, model_year) { this.type = type, this.model_year = model_year } } class Tesla extends Car{ constructor(type, model_year){ super(type, model_year) } } let myTesla1 = new Tesla("Sedan", 2015) let myTesla2 = new Tesla("Coupe", 2014) var objects = [myTesla1, myTesla2]; var results = []; objects.forEach(function(o){ for(var key in o){ results.push(key); results.push(o[key]); } }); console.log("myTesla1", myTesla1); console.log("myTesla2", myTesla2); console.log("results", results); |
。