に異なる形式に変換しながら、私は私のように変換関数を使用してい以下形式マージ配列のJavaScript
cars = [
{id: 1, make: 'audi', year: '2010', someProperty: true},
{id: 2, make: 'bmw', year: '2011', someProperty: false},
{id: 3, make: 'bmw', year: '2011', someProperty: true},
{id: 4, make: 'vw', year: '2010', someProperty: true},
{id: 5, make: 'vw', year: '2011', someProperty: true},
{id: 6, make: 'audi', year: '2011', someProperty: true},
{id: 7, make: 'bmw', year: '2010', someProperty: false},
{id: 8, make: 'bmw', year: '2011', someProperty: false},
{id: 9, make: 'bmw', year: '2010', someProperty: true}
]
の配列と以下の形式に変換し、
requiredFormat = [
{
somePropertyTrue: [
{id: 1, make: 'audi', year: '2010', someProperty: true},
{id: 4, make: 'vw', year: '2010', someProperty: true},
{id: 9, make: 'bmw', year: '2010', someProperty: true}
],
somePropertyFalse: [
{id: 7, make: 'bmw', year: '2010', someProperty: false}
],
year: '2010'
},
{
somePropertyTrue: [
{id: 3, make: 'bmw', year: '2011', someProperty: true},
{id: 5, make: 'vw', year: '2011', someProperty: true},
{id: 6, make: 'audi', year: '2011', someProperty: true}
],
somePropertyFalse: [
{id: 2, make: 'bmw', year: '2011', someProperty: false},
{id: 8, make: 'bmw', year: '2011', someProperty: false}
],
year: '2011'
}
]
を有します以下、
function transform(cars) {
return [...cars.reduce ((acc, car) => {
const yearGrp = acc.get(car.year) || {
somePropertyTrue: [],
somePropertyFalse: [],
year: car.year
};
yearGrp['someProperty' + (car.someProperty ? 'True' : 'False')].push(car);
return acc.set(car.year, yearGrp);
}, new Map).values()];
}
私は最初の配列をreadlineで読み込み、2000個のアイテムをすべて一時停止しています。すべての変換されたアイテムが1つの配列にマージされるように、以前に変換された配列を受け入れるように上記の関数を拡張するために、私は以下を試しましたが、これにアプローチする方法ではないことがわかります。ここ
let transform = function transform(cars) {
return [...cars.reduce((acc, arr) => {
if (!first) {
parsedArray.reduce((a) => {
const yearGrp = a.get(arr.year) ||
acc.get(arr.year) || {
somePropertyTrue: [],
somePropertyFalse: [],
year: arr.year
};
yearGrp['someProperty' + (car.someProperty ? 'True' : 'False')].push(arr);
return a.set(arr.year, yearGrp);
});
} else {
const yearGrp = acc.get(arr.year) || {
somePropertyTrue: [],
somePropertyFalse: [],
year: arr.year
};
yearGrp['someProperty' + (car.someProperty ? 'True' : 'False')].push(arr);
return acc.set(arr.year, yearGrp);
}
}, new Map())];
};
、parsedArrayは私が最初に時間を埋めるためにしようとしたものだとすることを他のすべての時間を使用しようと、 '最初の' フラグ
のように、それはデータのさらなる挿入のためのマップ/ 'acc'を維持する方が良いでしょう、マップ上の閉鎖を使用して機能を返すことができます。変換されたデータが必要な場合は、スナップショットを取り出すことができます。車から犯罪への素敵なモーフィング;-) –
更新を忘れて、それを編集します:) thanks – Sriram
どのように私はaccのスナップショットを取る、私はそれを取る場合は、どのように私は同じ再利用2回目ですか? – Sriram