希望:オブジェクトの単一の配列をループし、それらのオブジェクトのキーに基づいてオブジェクトに割り当てるための複数の配列を最も簡潔かつ効率的な方法で構築します。二つのアプローチ:Javascript:値の配列を含むオブジェクトのオブジェクトの配列 - 最もパフォーマンスの良い方法ですか?
ワン:
const arrayOfObjectsToObjectOfArraysOfValues = items => {
const newArrayOne = []
const newArrayTwo = []
const newArrayThree = []
items.forEach(({ value1, value2, value3 }) => {
newArrayOne.push(value1)
newArrayTwo.push(value2)
newArrayThree.push(value3)
})
return { newArrayOne, newArrayTwo, newArrayThree }
}
2:
const arrayOfObjectsToObjectOfArraysOfValues = items => ({
newArrayOne: items.map(({ value1 }) => value1),
newArrayTwo: items.map(({ value2 }) => value2),
newArrayThree: items.map(({ value3 }) => value3),
})
編集(このオプションもあります):
const arrayOfObjectsToObjectOfArraysOfValues = items => {
return items.reduce((r, { value1, value2, value3 }, i) => {
r.newArrayOne[i] = value1;
r.newArrayTwo[i] = value2;
r.newArrayThree[i] = value3;
return r;
}, { newArrayOne: [], newArrayTwo: [], newArrayThree: [] });
}
が明らかに二つ目は、より簡潔であるが、 1つだけが必要な3つのループを実行すると批判されることがあります。一方、最初のループサイクルでは3回の操作が行われます。重要な質問オプションは、「これは(またはもう少しエレガントな)オプションです(最も効果的です)」ですか?
あなたはすでに答えを知っていますか? 1ループ対3ループです。そして最も性能の良い方法は 'for'ループです。 – estus
私はおそらく '.push'は高価な操作(ループごとにもっと多くの操作)をする可能性があると考えました... – Dan
あなたは間違いなくパフォーマンスを測定する必要があります。あなたのターゲットを絞ったjavascriptエンジンのjsperf。 estusが反復ループ対応関数よりも遅い関数型関数を参照すると述べたのを除いて、ここでのパフォーマンスに関する明白な答えはありません。 –