ここには、多次元配列を渡してフラット化された新しい配列を返す関数lodashのflattenDeep()
のコピーがあります。このflattenDeep()
は再帰的に処理されます。なぜlodashでは、predicateとresultsの変数の先頭にvarキーワードがないのですか?
predicate
とresults
は、その背後にVARを使用しないでください:
私がいることに気づいたソースコードを読みますか?
predicate || (predicate = isFlattenable);
result || (result = []);
質問:なぜlodash述語と結果のためのグローバル変数を使用しましたか?これの背後に理由/理論がありますか?
取り除かJS:
var bigarray = [[1],[2,[3,3]],[1], 1];
/**
* Checks if `value` is a flattenable `arguments` object or array.
*
* @private
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
*/
function isFlattenable(value) {
return Array.isArray(value);
}
/**
* The base implementation of `_.flatten` with support for restricting flattening.
*
* @private
* @param {Array} array The array to flatten.
* @param {number} depth The maximum recursion depth.
* @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
* @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
* @param {Array} [result=[]] The initial result value.
* @returns {Array} Returns the new flattened array.
*/
function baseFlatten(array, depth, predicate, isStrict, result) {
var index = -1,
length = array.length;
predicate || (predicate = isFlattenable);
result || (result = []);
while (++index < length) {
var value = array[index];
if (depth > 0 && predicate(value)) {
if (depth > 1) {
// Recursively flatten arrays (susceptible to call stack limits).
baseFlatten(value, depth - 1, predicate, isStrict, result);
} else {
arrayPush(result, value);
}
} else if (!isStrict) {
result[result.length] = value;
}
}
return result;
}
/**
* Recursively flattens `array`.
*
* @static
* @memberOf _
* @since 3.0.0
* @category Array
* @param {Array} array The array to flatten.
* @returns {Array} Returns the new flattened array.
* @example
*
* _.flattenDeep([1, [2, [3, [4]], 5]]);
* // => [1, 2, 3, 4, 5]
*/
function flattenDeep(array) {
var length = array ? array.length : 0;
return length ? baseFlatten(array, Infinity) : [];
}
console.log(flattenDeep(bigarray));
メイクセンス...を通知するエラーを参照してください。これは愚かな疑問でした。 –
ダムではありません...それを汗ばませないでください! – JordanHendrix