Baseline Widely available
ÐеÑод Array.from()
ÑоздаÑÑ Ð½Ð¾Ð²Ñй ÑкземплÑÑ Array
из маÑÑивоподобного или иÑеÑиÑÑемого обÑекÑа.
console.log(Array.from("foo"));
// Expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], (x) => x + x));
// Expected output: Array [2, 4, 6]
СинÑакÑиÑ
Array.from(arrayLike[, mapFn[, thisArg]])ÐаÑамеÑÑÑ
arrayLike
ÐаÑÑивоподобнÑй или иÑеÑиÑÑемÑй обÑекÑ, пÑеобÑазÑемÑй в маÑÑив.
mapFn
ÐеобÑзаÑелÑнÑй
ÐÑобÑажаÑÑÐ°Ñ ÑÑнкÑиÑ, вÑзÑÐ²Ð°ÐµÐ¼Ð°Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа маÑÑива.
thisArg
ÐеобÑзаÑелÑнÑй
ÐнаÑение, иÑполÑзÑемое в каÑеÑÑве this
пÑи вÑполнении ÑÑнкÑии mapFn
.
ÐовÑй ÑкземплÑÑ Array
Array.from()
позволÑÐµÑ Ð²Ð°Ð¼ ÑоздаваÑÑ Ð¼Ð°ÑÑÐ¸Ð²Ñ Ð¸Ð·:
length
и ÑлеменÑами по индекÑнÑм клÑÑам) илиMap
или Set
).Array.from()
Ð¸Ð¼ÐµÐµÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑй паÑамеÑÑ mapFn
, коÑоÑÑй позволÑÐµÑ Ð²Ð°Ð¼ вÑполнÑÑÑ ÑÑнкÑÐ¸Ñ map
Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа Ñоздаваемого маÑÑива (или его подклаÑÑа). ÐÑоÑе говоÑÑ, вÑзов Array.from(obj, mapFn, thisArg)
ÑквиваленÑен ÑепоÑке Array.from(obj).map(mapFn, thisArg)
, за иÑклÑÑением Ñого, ÑÑо он не ÑоздаÑÑ Ð¿ÑомежÑÑоÑного маÑÑива. ÐÑо оÑобенно важно Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
подклаÑÑов маÑÑива, вÑоде ÑипизиÑованнÑÑ
маÑÑивов, поÑколÑÐºÑ Ð¿ÑомежÑÑоÑнÑй маÑÑив неизбежно пÑиведÑÑ Ðº ÑÑеÑÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñений, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ подпали под подÑ
одÑÑий Ñип.
СвойÑÑво length
меÑода from()
Ñавно 1.
Ð ES2015 клаÑÑовÑй ÑинÑакÑÐ¸Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑоздаваÑÑ Ð¿Ð¾Ð´ÐºÐ»Ð°ÑÑÑ ÐºÐ°Ðº вÑÑÑоеннÑÑ
клаÑÑов, Ñак и клаÑÑов, опÑеделÑннÑÑ
полÑзоваÑелем; в ÑезÑлÑÑаÑе ÑÑаÑиÑеÑкие меÑÐ¾Ð´Ñ ÐºÐ»Ð°ÑÑа, вÑоде Array.from
«наÑледÑÑÑÑÑ» подклаÑÑами Array
и ÑоздаÑÑ Ð½Ð¾Ð²Ñе ÑкземплÑÑÑ Ð¿Ð¾Ð´ÐºÐ»Ð°ÑÑа, а не клаÑÑа Array
.
String
Array.from("foo");
// ['f', 'o', 'o']
ÐаÑÑив из Set
var s = new Set(["foo", window]);
Array.from(s);
// ['foo', window]
ÐаÑÑив из Map
var m = new Map([
[1, 2],
[2, 4],
[4, 8],
]);
Array.from(m);
// [[1, 2], [2, 4], [4, 8]]
ÐаÑÑив из маÑÑивоподобного обÑекÑа (arguments)
function f() {
return Array.from(arguments);
}
f(1, 2, 3);
// [1, 2, 3]
ÐÑполÑзование ÑÑÑелоÑной ÑÑнкÑии и Array.from()
// ÐÑполÑзование ÑÑÑелоÑной ÑÑнкÑии в каÑеÑÑве ÑÑнкÑии оÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ
// манипÑлиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑлеменÑами
Array.from([1, 2, 3], (x) => x + x);
// [2, 4, 6]
// ÐенеÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑи ÑиÑел
Array.from({ length: 5 }, (v, k) => k);
// [0, 1, 2, 3, 4]
ÐолиÑил
ÐеÑод Array.from
бÑл добавлен к ÑÑандаÑÑÑ ECMA-262 в 6-м издании; поÑÑÐ¾Ð¼Ñ Ð¾Ð½ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑÑÑÑÑвоваÑÑ Ð² дÑÑгиÑ
ÑеализаÑиÑÑ
ÑÑандаÑÑа. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑабоÑаÑÑ Ñ Ð½Ð¸Ð¼, добавив ÑледÑÑÑий код в наÑало ваÑиÑ
ÑкÑипÑов, он позволÑÐµÑ Ð¸ÑполÑзоваÑÑ Array.from
в ÑеализаÑиÑÑ
, коÑоÑÑе не поддеÑживаÑÑ ÑÑÐ¾Ñ Ð¼ÐµÑод. ÐÑÐ¾Ñ Ð°Ð»Ð³Ð¾ÑиÑм ÑвлÑеÑÑÑ ÑоÑно Ñем, ÑÑо опиÑан в ECMA-262 6-го изданиÑ; он пÑедполагаеÑ, ÑÑо Object
и TypeError
имеÑÑ Ñвои пеÑвонаÑалÑнÑе знаÑÐµÐ½Ð¸Ñ Ð¸ ÑÑо callback.call
вÑÑиÑлÑеÑÑÑ Ð² оÑигиналÑное знаÑение Function.prototype.call
. ÐÑоме Ñого, поÑколÑÐºÑ Ð¸ÑÑиннÑе иÑеÑиÑÑемÑе обÑекÑÑ Ð½Ðµ могÑÑ Ð±ÑÑÑ Ð·Ð°Ð¼ÐµÐ½ÐµÐ½Ñ Ð¿Ð¾Ð»Ð¸Ñилом, ÑÑа ÑеализаÑÐ¸Ñ Ð½Ðµ поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¾Ð±Ñие иÑеÑиÑÑемÑе обÑекÑÑ, как они опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð² 6-м издании ECMA-262.
// Шаги алгоÑиÑма ECMA-262, 6-е издание, 22.1.2.1
// СÑÑлка: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from
if (!Array.from) {
Array.from = (function () {
var toStr = Object.prototype.toString;
var isCallable = function (fn) {
return typeof fn === "function" || toStr.call(fn) === "[object Function]";
};
var toInteger = function (value) {
var number = Number(value);
if (isNaN(number)) {
return 0;
}
if (number === 0 || !isFinite(number)) {
return number;
}
return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
};
var maxSafeInteger = Math.pow(2, 53) - 1;
var toLength = function (value) {
var len = toInteger(value);
return Math.min(Math.max(len, 0), maxSafeInteger);
};
// СвойÑÑво length меÑода from Ñавно 1.
return function from(arrayLike /*, mapFn, thisArg */) {
// 1. Ðоложим C ÑавнÑм знаÑÐµÐ½Ð¸Ñ this.
var C = this;
// 2. Ðоложим items ÑавнÑм ToObject(arrayLike).
var items = Object(arrayLike);
// 3. ReturnIfAbrupt(items).
if (arrayLike == null) {
throw new TypeError(
"Array.from requires an array-like object - not null or undefined",
);
}
// 4. ÐÑли mapfn Ñавен undefined, положим mapping ÑавнÑм false.
var mapFn = arguments.length > 1 ? arguments[1] : void undefined;
var T;
if (typeof mapFn !== "undefined") {
// 5. инаÑе
// 5. a. ÐÑли вÑзов IsCallable(mapfn) Ñавен false, вÑкидÑваем иÑклÑÑение TypeError.
if (!isCallable(mapFn)) {
throw new TypeError(
"Array.from: when provided, the second argument must be a function",
);
}
// 5. b. ÐÑли thisArg пÑиÑÑÑÑÑвÑеÑ, положим T ÑавнÑм thisArg; инаÑе положим T ÑавнÑм undefined.
if (arguments.length > 2) {
T = arguments[2];
}
}
// 10. Ðоложим lenValue ÑавнÑм Get(items, "length").
// 11. Ðоложим len ÑавнÑм ToLength(lenValue).
var len = toLength(items.length);
// 13. ÐÑли IsConstructor(C) Ñавен true, Ñо
// 13. a. Ðоложим A ÑавнÑм ÑезÑлÑÑаÑÑ Ð²Ñзова внÑÑÑеннего меÑода [[Construct]]
// обÑекÑа C Ñо ÑпиÑком аÑгÑменÑов, ÑодеÑжаÑим единÑÑвеннÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ len.
// 14. a. ÐнаÑе, положим A ÑавнÑм ArrayCreate(len).
var A = isCallable(C) ? Object(new C(len)) : new Array(len);
// 16. Ðоложим k ÑавнÑм 0.
var k = 0;
// 17. Ðока k < len, бÑдем повÑоÑÑÑÑ... (Ñаги Ñ a по h)
var kValue;
while (k < len) {
kValue = items[k];
if (mapFn) {
A[k] =
typeof T === "undefined"
? mapFn(kValue, k)
: mapFn.call(T, kValue, k);
} else {
A[k] = kValue;
}
k += 1;
}
// 18. Ðоложим putStatus ÑавнÑм Put(A, "length", len, true).
A.length = len;
// 20. ÐеÑнÑм A.
return A;
};
})();
}
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4