私はこれを持っています。 各行の後に、<div class="clearfix"></div>
を挿入したいと思います。Javascriptの地図アレイ最後のアイテム
私は何とか各行の最後のインデックスを取得できたら、それを行マップコールバックで使用できるようになると思います。誰かが私にそれをする方法を示すことができますか?
私はこれを持っています。 各行の後に、<div class="clearfix"></div>
を挿入したいと思います。Javascriptの地図アレイ最後のアイテム
私は何とか各行の最後のインデックスを取得できたら、それを行マップコールバックで使用できるようになると思います。誰かが私にそれをする方法を示すことができますか?
const rowLen = row.length;
row.map((rank, i) => {
if (rowLen === i + 1) {
// last one
} else {
// not last one
}
})
ありがとう、それは完全に働いた。 – cocacrave
LeoYuan 袁力皓が答えたように、これは正解ですが、それは少し改善することができます。
map
は、反復配列そのものである第3のパラメータを持つ関数を受け入れます。 arr.length
代わりのrow.length
を使用して
row.map((rank, i, arr) => {
if (arr.length - 1 === i) {
// last one
} else {
// not last one
}
});
はいくつかの理由のためのより良い、正しいアプローチです:あなたはスコープを混在する場合
明示的な配列を提供したい場合は、同様に機能します。例えば。
[1,2,3,4].map((rank, i, arr) => {
if (arr.length - 1 === i) {
// last one
} else {
// not last one
}
});
あなたは(主にパフォーマンス向上のため)map
範囲外のコールバックを移動したい場合は、範囲外であるとしてrow.length
使用することを間違っているだろう。例えば。 OPの場合:
const mapElement = (rowIndex, state, toggled, onClick) => {
return (rank, i, arr) => {
let lastIndex = arr.length - 1;
return [element(rowIndex, i, state, rank, toggled, onClick, lastIndex)];
};
};
map = ranks.map((row, r) => row.map(mapElement(r, state, toggled, onClick)));
なぜ 'row.length'ではなく' arr'を追加しますか? – Sanderfish
@Sanderfish 3つの理由:1.一般的に、私はスコープを混在させたくないので、特にこのコードが巨大なアプリケーションの一部である場合には、よりクリーンな解決策になります。この解決法は明示的に定義された配列、例えば'[1,2,3] .map((rank、i、arr)=> {...})'; 3.何らかの理由(ループ内など)でコールバックをスコープ外に移動する場合は、 'row.length'を実行するだけでは機能しません。私は答えを明確にするように更新します。 –
'.map((rank、i、{length})=> {...})' –
受け入れ答えに若干の改善:
const lastIndex = row.length - 1;
row.map((rank, i) => {
if (i === lastIndex) {
// last one
} else {
// not last one
}
})
これは、ループ内から演算を除去します。
実際に達成したいことは何ですか? – kazenorin