オブジェクト内の配列値をフラットにしたいと思います。下記のsample
のようになります。この解決策は、ecommerce
にのみ適用されるのではなく、文字通り配列型としてオブジェクト内に存在する可能性があるものをすべて使用してください。例:私は出力になりたいJavascript:オブジェクト内の配列値を均等化する(ネストされた)
var sample = {
price: "999",
description: "...",
ecommerce: {
products: [
{
brand: "apple",
category: "phone"
},
{
brand: "google",
category: "services"
}
]
}
};
そして:
{
price: "999",
description: "..."
ecommerce: {
products_1: {
brand: "apple",
category: "phone"
},
products_2: {
brand: "google",
category: "services"
}
}
}
のJavaScript(ES6/7)でこれを行うための最も効率的な方法は何ですか?
ありがとうございます!
コメントといくつかのマイナスのために更新されました!質問が最初に尋ねられたときにマイナスをクリックするのが速かった人がそれを取り消すなら、いいでしょう。
私はその完全に間違ってこれを試してみたと私も確信しているが、これを行うためのより良い機能的な方法をtheresの:
function flattenArray(array) {
var obj = array.reduce((acc, cur, i) => {
acc[i] = cur;
return acc;
}, {});
return obj;
}
function cleanObject(object) {
for (let key in object) {
let testObject = object[key];
if (Array.isArray(testObject)) {
testObject = flattenArray(testObject)
} else if (typeof(testObject) === 'object') {
testObject = cleanObject(testObject);
}
return testObject;
}
return object;
}
var clean = cleanObject(sample);
UPDATE 2:両方のソリューションはecommerce
どのようにとても執着したようが見て次のオブジェクトは、ソリューションの仕事だったかどう:その、あまりにも異なるのネストレベルでこの異なるkey
であるだけでなく、
var sample = {
price: "999",
description: "...",
differentArray: [
{
brand: "apple",
category: "phone"
},
{
brand: "google",
category: "services"
}
]
};
お知らせ。私はどうだろう何
どのようにあなたの現在の実装だ...ので、1が重複したロジックを取り除くかもしれないステップを消毒二つの機能との交流/相反再帰で終わりますか? – mersocarlin
...これを確認してください[一般的に 'Array#reduce'に基づくアプローチ](https://stackoverflow.com/questions/47221864/javascript-flatten-any-array-values-within-object-nested/47266505#47266505 )は、2つのソリューションを提供します.1つは単純な再帰で、もう1つは交互/逆数再帰を使用します。おかげさまで –