ඔබට එසේ කළ හැකිය:
var N = 10;
Array.apply(null, {length: N}).map(Number.call, Number)
ප්රති result ලය: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
හෝ අහඹු අගයන් සමඟ:
Array.apply(null, {length: N}).map(Function.call, Math.random)
ප්රති result ලය: [0.7082694901619107, 0.9572225909214467, 0.8586748542729765, 0.8653848143294454, 0.008339877473190427, 0.9911756622605026, 0.8133423360995948, 0.83775885535785535785580585535785535785535785535
පැහැදිලි කිරීම
පළමුව, මේ ලිපිය Number.call(undefined, N)
හා සමාන වේ Number(N)
කරන පමණක් ප්රතිලාභ, N
. අපි පසුව එම කරුණ භාවිතා කරමු.
Array.apply(null, [undefined, undefined, undefined])
ට සමාන Array(undefined, undefined, undefined)
වන අතර එය මූලද්රව්ය තුනක අරාවක් නිපදවන අතර undefined
එක් එක් මූලද්රව්යයට පවරයි .
N මූලද්රව්යයන්ට එය සාමාන්යකරණය කරන්නේ කෙසේද? Array()
ක්රියා කරන ආකාරය සලකා බලන්න , එය මේ වගේ දෙයක් වේ:
function Array() {
if ( arguments.length == 1 &&
'number' === typeof arguments[0] &&
arguments[0] >= 0 && arguments &&
arguments[0] < 1 << 32 ) {
return [ … ]; // array of length arguments[0], generated by native code
}
var a = [];
for (var i = 0; i < arguments.length; i++) {
a.push(arguments[i]);
}
return a;
}
ECMAScript 5 සිට , Function.prototype.apply(thisArg, argsArray)
තාරා-ටයිප් කළ අරාව වැනි වස්තුවක් එහි දෙවන පරාමිතිය ලෙස පිළිගනී. අපි ආයාචනා කළහොත් Array.apply(null, { length: N })
එය ක්රියාත්මක වේ
function Array() {
var a = [];
for (var i = 0; i < /* arguments.length = */ N; i++) {
a.push(/* arguments[i] = */ undefined);
}
return a;
}
දැන් අපට N -element array එකක් ඇත, සෑම මූලද්රව්යයක්ම සකසා ඇත undefined
. අපි .map(callback, thisArg)
එය ඉල්ලා සිටින විට, එක් එක් මූලද්රව්යයේ ප්රති .ලයට සැකසෙනු ඇත callback.call(thisArg, element, index, array)
. එමනිසා, [undefined, undefined, …, undefined].map(Number.call, Number)
එක් එක් මූලද්රව්යය සිතියම් ගත (Number.call).call(Number, undefined, index, array)
කරනු ඇත Number.call(undefined, index, array)
, එය අප කලින් නිරීක්ෂණය කළ පරිදි ඇගයීමට සමාන වේindex
. එමඟින් මූලද්රව්ය ඒවායේ දර්ශකයට සමාන වන අරාව සම්පූර්ණ කරයි.
Array.apply(null, {length: N})
සාධාරණ වෙනුවට කරදරයෙන් මිදෙන්නේ ඇයි Array(N)
? සියල්ලට පසු, ප්රකාශන දෙකෙහිම ප්රති -ලය වනුයේ නිර්වචනය නොකළ මූලද්රව්යයන්ගේ N- මූලද්රව්ය සමූහයකි. මෙහි ඇති වෙනස වන්නේ හිටපු ප්රකාශනය තුළ, එක් එක් මූලද්රව්යය සුවිශේෂව බව ය සකස් නිර්වචනය නොකළ කිරීමට, අග දී, එක් එක් මූලද්රව්යය කවදාවත් නියම කර තිබූ අතර. ප්රලේඛනයට අනුව .map()
:
callback
නියම කර ඇත්තේ අගයන් පවරා ඇති අරාවේ දර්ශක සඳහා පමණි; මකාදැමූ හෝ කිසි විටෙකත් අගයන් පවරා නොමැති දර්ශක සඳහා එය ආයාචනා නොකෙරේ.
එබැවින් Array(N)
ප්රමාණවත් නොවේ; Array(N).map(Number.call, Number)
එහි ප්රති result ලය වනුයේ N හි ආරම්භක නොවන අරාවකි .
අනුකූලතාව
මෙම තාක්ෂණය Function.prototype.apply()
ECMAScript 5 හි නිශ්චිතව දක්වා ඇති හැසිරීම මත රඳා පවතින බැවින් , එය ක්රෝම් 14 සහ ඉන්ටර්නෙට් එක්ස්ප්ලෝරර් 9 වැනි පූර්ව ECMAScript බ්රව්සර් 5 හි ක්රියා නොකරනු ඇත .