2つのオブジェクトを比較しながら配列のネストされた値をグループ化-JavaScript
次のJSONオブジェクトがあるとします-
const input = { "before": { "device": [ { "id": "1234", "price": "10", "features": [ { "name": "samsung", "price": "10" }, { "name": "Apple", "price": "20" } ] }, { "id": "2154", "price": "20", "features": [ { "name": "samsung", "price": "30" }, { "name": "Moto", "price": "40" } ] } ] }, "after": { "device": [ { "id": "1234", "price": "50", "features": [ { "name": "samsung", "price": "20" }, { "name": "Lenovo", "price": "30" } ] }, { "id": "2158", "price": "40", "features": [ { "name": "samsung", "price": "30" } ] } ] } };
前後のオブジェクトに同じIDがある場合は、IDとその機能を1つの行にグループ化する必要があります。
また、必要な出力は、次の視覚的表現によってより適切に説明できます。
同じ方法でデータをグループ化およびソートする関数を作成する必要があります。
例
以下はコードです-
const input = { "before": { "device": [ { "id": "1234", "price": "10", "features": [ { "name": "samsung", "price": "10" }, { "name": "Apple", "price": "20" } ] }, { "id": "2154", "price": "20", "features": [ { "name": "samsung", "price": "30" }, { "name": "Moto", "price": "40" } ] } ] }, "after": { "device": [ { "id": "1234", "price": "50", "features": [ { "name": "samsung", "price": "20" }, { "name": "Lenovo", "price": "30" } ] }, { "id": "2158", "price": "40", "features": [ { "name": "samsung", "price": "30" } ] } ] } }; const formatJSON = data => { const sub = Object.fromEntries(Object.keys(data).map(k => [k, 0])); return Object.values(Object.entries(data).reduce((r, [col, { device }]) => { device.forEach(({ id, price, features }) => { r[id] = r[id] || [{ id, ...sub }]; r[id][0][col] = price; features.forEach(({ name, price }) => { let temp = r[id].find(q => q.name === name); if (!temp){ r[id].push(temp = { name, ...sub }); }; temp[col] = price; }); }); return r; }, {})); }; console.log(formatJSON(input));
出力
これにより、コンソールに次の出力が生成されます-
[ [ { id: '1234', before: '10', after: '50' }, { name: 'samsung', before: '10', after: '20' }, { name: 'Apple', before: '20', after: 0 }, { name: 'Lenovo', before: 0, after: '30' } ], [ { id: '2154', before: '20', after: 0 }, { name: 'samsung', before: '30', after: 0 }, { name: 'Moto', before: '40', after: 0 } ], [ { id: '2158', before: 0, after: '40' }, { name: 'samsung', before: 0, after: '30' } ] ]
-
JavaScriptでIDごとにオブジェクトの配列をグループ化する方法は?
以下は、JavaScriptでオブジェクトの配列をIDでグループ化するコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>
-
JavaScriptオブジェクトの配列で配列のメソッドを使用していますか?
以下は、JavaScriptオブジェクトの配列で配列のメソッドを使用するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <styl