Baseline Widely available
ÐеÑод slice()
возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð²Ñй маÑÑив, ÑодеÑжаÑий ÐºÐ¾Ð¿Ð¸Ñ ÑаÑÑи иÑÑ
одного маÑÑива.
const animals = ["ant", "bison", "camel", "duck", "elephant"];
console.log(animals.slice(2));
// Expected output: Array ["camel", "duck", "elephant"]
console.log(animals.slice(2, 4));
// Expected output: Array ["camel", "duck"]
console.log(animals.slice(1, 5));
// Expected output: Array ["bison", "camel", "duck", "elephant"]
console.log(animals.slice(-2));
// Expected output: Array ["duck", "elephant"]
console.log(animals.slice(2, -1));
// Expected output: Array ["camel", "duck"]
console.log(animals.slice());
// Expected output: Array ["ant", "bison", "camel", "duck", "elephant"]
СинÑакÑиÑ
arr.slice([begin[, end]])ÐаÑамеÑÑÑ
begin
ÐеобÑзаÑелÑнÑй
ÐÐ½Ð´ÐµÐºÑ (ÑÑÑÑ Ð½Ð°ÑинаеÑÑÑ Ñ Ð½ÑлÑ), по коÑоÑÐ¾Ð¼Ñ Ð½Ð°ÑинаÑÑ Ð¸Ð·Ð²Ð»ÐµÑение.
ÐÑли Ð¸Ð½Ð´ÐµÐºÑ Ð¾ÑÑиÑаÑелÑнÑй, begin
ÑказÑÐ²Ð°ÐµÑ ÑмеÑение Ð¾Ñ ÐºÐ¾Ð½Ñа поÑледоваÑелÑноÑÑи. ÐÑзов slice(-2)
извлеÑÑÑ Ð´Ð²Ð° поÑледниÑ
ÑлеменÑа поÑледоваÑелÑноÑÑи.
ÐÑли begin
не опÑеделÑн, slice()
наÑÐ¸Ð½Ð°ÐµÑ ÑабоÑаÑÑ Ñ Ð¸Ð½Ð´ÐµÐºÑа 0
.
ÐÑли begin
болÑÑе Ð´Ð»Ð¸Ð½Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑи веÑнÑÑÑÑ Ð¿ÑÑÑой маÑÑив.
end
ÐеобÑзаÑелÑнÑй
ÐÐ½Ð´ÐµÐºÑ (ÑÑÑÑ Ð½Ð°ÑинаеÑÑÑ Ñ Ð½ÑлÑ), по коÑоÑÐ¾Ð¼Ñ Ð·Ð°ÐºÐ°Ð½ÑиваÑÑ Ð¸Ð·Ð²Ð»ÐµÑение. ÐеÑод slice()
Ð¸Ð·Ð²Ð»ÐµÐºÐ°ÐµÑ ÑлеменÑÑ Ñ Ð¸Ð½Ð´ÐµÐºÑом менÑÑе end
.
ÐÑзов slice(1, 4)
извлеÑÑÑ ÑлеменÑÑ Ñо вÑоÑого по ÑеÑвÑÑÑÑй (ÑлеменÑÑ Ð¿Ð¾ индекÑам 1, 2 и 3).
ÐÑли Ð¸Ð½Ð´ÐµÐºÑ Ð¾ÑÑиÑаÑелÑнÑй, end
ÑказÑÐ²Ð°ÐµÑ ÑмеÑение Ð¾Ñ ÐºÐ¾Ð½Ñа поÑледоваÑелÑноÑÑи. ÐÑзов slice(2, -1)
извлеÑÑÑ Ð¸Ð· поÑледоваÑелÑноÑÑи ÑлеменÑÑ Ð½Ð°ÑÐ¸Ð½Ð°Ñ Ñ ÑÑеÑÑего ÑлеменÑа Ñ Ð½Ð°Ñала и заканÑÐ¸Ð²Ð°Ñ Ð²ÑоÑÑм Ñ ÐºÐ¾Ð½Ñа.
ÐÑли end >= array.length
или end
опÑÑен, slice()
Ð¸Ð·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð²Ñе ÑлеменÑÑ Ð´Ð¾ конÑа поÑледоваÑелÑноÑÑи (arr.length
).
ÐовÑй маÑÑив, ÑодеÑжаÑий извлеÑÑннÑе ÑлеменÑÑ.
ÐпиÑаниеÐеÑод slice()
не изменÑÐµÑ Ð¸ÑÑ
однÑй маÑÑив, а возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð²ÑÑ Â«Ð¾Ð´Ð½Ð¾ÑÑовневÑÑ» копиÑ, ÑодеÑжаÑÑÑ ÐºÐ¾Ð¿Ð¸Ð¸ ÑлеменÑов, вÑÑезаннÑÑ
из иÑÑ
одного маÑÑива. ÐлеменÑÑ Ð¸ÑÑ
одного маÑÑива копиÑÑÑÑÑÑ Ð² новÑй маÑÑив по ÑледÑÑÑим пÑавилам:
slice()
копиÑÑÐµÑ ÑÑÑлки на обÑекÑÑ Ð² новÑй маÑÑив. РоÑигинал, и новÑй маÑÑив ÑÑÑлаÑÑÑÑ Ð½Ð° один и ÑÐ¾Ñ Ð¶Ðµ обÑекÑ. То еÑÑÑ, еÑли обÑÐµÐºÑ Ð¿Ð¾ ÑÑÑлке бÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ñн, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð²Ð¸Ð´Ð½Ñ Ð¸ в новом, и в иÑÑ
одном маÑÑиваÑ
.String
и Number
): меÑод slice()
копиÑÑÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑÑÑок и ÑиÑел в новÑй маÑÑив. ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÑоки или ÑиÑла в одном маÑÑиве никак не заÑÑÐ°Ð³Ð¸Ð²Ð°ÐµÑ Ð´ÑÑгой.ÐÑли к лÑÐ±Ð¾Ð¼Ñ Ð¼Ð°ÑÑÐ¸Ð²Ñ Ð±ÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½ новÑй ÑлеменÑ, ÑÑо никак не повлиÑÐµÑ Ð½Ð° дÑÑгой маÑÑив.
ÐÑимеÑÑ ÐÑимеÑ: возвÑÐ°Ñ ÑаÑÑи ÑÑÑеÑÑвÑÑÑего маÑÑива// ÐÑимеÑ: наÑи Ñ
оÑоÑие дÑÑзÑÑ ÑиÑÑÑÑовÑе ÑÑеди ÑÑÑкÑов
var fruits = ["Ðанан", "ÐпелÑÑин", "Ðимон", "Яблоко", "Ðанго"];
var citrus = fruits.slice(1, 3);
// citrus ÑодеÑÐ¶Ð¸Ñ ['ÐпелÑÑин', 'Ðимон']
ÐÑимеÑ: иÑполÑзование меÑода slice()
Ð ÑледÑÑÑем пÑимеÑе меÑод slice()
ÑоздаÑÑ Ð½Ð¾Ð²Ñй маÑÑив, newCar
, из маÑÑива myCar
. Ðба ÑодеÑÐ¶Ð°Ñ ÑÑÑÐ»ÐºÑ Ð½Ð° обÑÐµÐºÑ myHonda
. Ðогда ÑÐ²ÐµÑ Ð² обÑекÑе myHonda
изменÑеÑÑÑ Ð½Ð° багÑовÑй, оба маÑÑива замеÑаÑÑ ÑÑо изменение.
// ÐÑполÑзÑÑ slice, ÑоздаÑм newCar из myCar.
var myHonda = {
color: "кÑаÑнÑй",
wheels: 4,
engine: { cylinders: 4, size: 2.2 },
};
var myCar = [myHonda, 2, "в Ñ
оÑоÑем ÑоÑÑоÑнии", "пÑиобÑеÑена в 1997"];
var newCar = myCar.slice(0, 2);
// ÐÑобÑажаем знаÑÐµÐ½Ð¸Ñ myCar, newCar и ÑÐ²ÐµÑ myHonda
// по ÑÑÑлкам из обоиÑ
маÑÑивов.
console.log("myCar = " + myCar.toSource());
console.log("newCar = " + newCar.toSource());
console.log("myCar[0].color = " + myCar[0].color);
console.log("newCar[0].color = " + newCar[0].color);
// ÐзменÑем ÑÐ²ÐµÑ myHonda.
myHonda.color = "багÑовÑй";
console.log("ÐовÑй ÑÐ²ÐµÑ Ð¼Ð¾ÐµÐ¹ Honda - " + myHonda.color);
// ÐÑобÑажаем ÑÐ²ÐµÑ myHonda по ÑÑÑлкам из обоиÑ
маÑÑивов.
console.log("myCar[0].color = " + myCar[0].color);
console.log("newCar[0].color = " + newCar[0].color);
ÐÑÐ¾Ñ ÑкÑÐ¸Ð¿Ñ Ð²ÑведеÑ:
myCar = [{color:'кÑаÑнÑй', wheels:4, engine:{cylinders:4, size:2.2}}, 2,
'в Ñ
оÑоÑем ÑоÑÑоÑнии', 'пÑиобÑеÑена в 1997']
newCar = [{color:'кÑаÑнÑй', wheels:4, engine:{cylinders:4, size:2.2}}, 2]
myCar[0].color = кÑаÑнÑй
newCar[0].color = кÑаÑнÑй
ÐовÑй ÑÐ²ÐµÑ Ð¼Ð¾ÐµÐ¹ Honda - багÑовÑй
myCar[0].color = багÑовÑй
newCar[0].color = багÑовÑй
ÐаÑÑивоподобнÑе обÑекÑÑ
ÐеÑод slice()
Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÑÑивоподобнÑÑ
обÑекÑов / коллекÑий в новÑй маÑÑив Array
. Ðам пÑоÑÑо нÑжно пÑивÑзаÑÑ Ð¼ÐµÑод к обÑекÑÑ. ÐÑевдомаÑÑив arguments
внÑÑÑи ÑÑнкÑии как Ñаз ÑвлÑеÑÑÑ Ð¿ÑимеÑом «маÑÑивоподобного обÑекÑа».
function list() {
return Array.prototype.slice.call(arguments, 0);
}
var list1 = list(1, 2, 3); // [1, 2, 3]
ÐÑивÑзка Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÑÑеÑÑвлена поÑÑедÑÑвом ÑÑнкÑии call()
из пÑоÑоÑипа ÑÑнкÑии Function.prototype
, Ñакже запиÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑокÑаÑена до [].slice.call(arguments)
вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Array.prototype.slice.call()
. РлÑбом ÑлÑÑае, она Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑпÑоÑена поÑÑедÑÑвом иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑии bind()
.
var unboundSlice = Array.prototype.slice;
var slice = Function.prototype.call.bind(unboundSlice);
function list() {
return slice(arguments, 0);
}
var list1 = list(1, 2, 3); // [1, 2, 3]
СовеÑÑенÑÑвование кÑоÑÑ-бÑаÑзеÑного поведениÑ
ХоÑÑ ÑпеÑиÑикаÑÐ¸Ñ Ð½Ðµ ÑÑебÑÐµÑ Ð¾Ñ Ñ
оÑÑ-обÑекÑов (напÑимеÑ, обÑекÑов DOM) ÑледоваÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Mozilla пÑи пÑеобÑазовании Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Array.prototype.slice()
и IE < 9 Ñак не делаеÑ, веÑÑии IE, наÑÐ¸Ð½Ð°Ñ Ñ 9-й ÑÑо ÑмеÑÑ. «ÐÑокладÑвание» позволÑÐµÑ Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð½Ð°Ð´Ñжного кÑоÑÑ-бÑаÑзеÑного поведениÑ. Ðока дÑÑгие ÑовÑеменнÑе бÑаÑзеÑÑ Ð±ÑдÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ ÑÑÑ ÑпоÑобноÑÑÑ, ÑÑо и делаÑÑ Ð² наÑÑоÑÑее вÑÐµÐ¼Ñ IE, Mozilla, Chrome, Safari и Opera, ÑазÑабоÑÑики, ÑиÑÐ°Ñ (поддеÑживаÑÑий DOM) код ÑÑнкÑии slice()
, опиÑаÑÑийÑÑ Ð½Ð° ÑÑÑ Ð¿ÑокладкÑ, не бÑдÑÑ Ð²Ð²Ð¾Ð´Ð¸ÑÑÑÑ Ð² заблÑждение его ÑеманÑикой; они могÑÑ Ñмело полагаÑÑÑÑ Ð½Ð° ÑекÑÑÑÑ ÑеманÑикÑ, ÑвлÑÑÑÑÑÑÑ, видимо, де-ÑакÑо ÑÑандаÑÑнÑм поведением. (ÐÑокладка Ñакже иÑпÑавлÑÐµÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ IE, позволÑÑ ÑабоÑаÑÑ Ñо вÑоÑÑм аÑгÑменÑом slice()
, Ñвно опÑеделÑннÑм как null
/undefined
, поÑколÑÐºÑ Ð±Ð¾Ð»ÐµÐµ Ñанние веÑÑии IE Ñакое не позволÑÑÑ, но вÑе ÑовÑеменнÑе бÑаÑзеÑÑ, в Ñом ÑиÑле IE >= 9, поддеÑживаÑÑ Ð´Ð°Ð½Ð½Ð¾Ðµ поведение.)
/**
* ÐÑокладка Ð´Ð»Ñ "иÑпÑавлениÑ" оÑÑÑÑÑÑÐ²Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки в IE < 9 пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ slice
* к Ñ
оÑÑ-обÑекÑам вÑоде NamedNodeMap, NodeList и HTMLCollection
* (ÑеÑ
ниÑеÑки, поÑколÑÐºÑ Ñ
оÑÑ-обÑекÑÑ Ð·Ð°Ð²Ð¸ÑÑÑ Ð¾Ñ ÑеализаÑии,
* по кÑайней меÑе, до ES2015, IE не обÑзан Ñак ÑабоÑаÑÑ).
* Также ÑабоÑÐ°ÐµÑ Ð´Ð»Ñ ÑÑÑок, иÑпÑавлÑÐµÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ IE < 9, позволÑÑ Ñвно ÑказÑваÑÑ undefined
* вÑоÑÑм аÑгÑменÑом (как в Firefox), и пÑедоÑвÑаÑÐ°ÐµÑ Ð¾Ñибки, возникаÑÑие пÑи
* вÑзове на дÑÑгиÑ
обÑекÑаÑ
DOM.
*/
(function () {
"use strict";
var _slice = Array.prototype.slice;
try {
// Ðе Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ñ ÑлеменÑами DOM в IE < 9
_slice.call(document.documentElement);
} catch (e) {
// Ð IE < 9 кидаеÑÑÑ Ð¸ÑклÑÑение
// ФÑнкÑÐ¸Ñ Ð±ÑÐ´ÐµÑ ÑабоÑаÑÑ Ð´Ð»Ñ Ð¸ÑÑиннÑÑ
маÑÑивов, маÑÑивоподобнÑÑ
обÑекÑов,
// NamedNodeMap (аÑÑибÑÑÑ, ÑÑÑноÑÑи, пÑимеÑаниÑ),
// NodeList (напÑимеÑ, getElementsByTagName), HTMLCollection (напÑимеÑ, childNodes)
// и не бÑÐ´ÐµÑ Ð¿Ð°Ð´Ð°ÑÑ Ð½Ð° дÑÑгиÑ
обÑекÑаÑ
DOM (как ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° ÑлеменÑаÑ
DOM в IE < 9)
Array.prototype.slice = function (begin, end) {
// IE < 9 бÑÐ´ÐµÑ Ð½ÐµÐ´Ð¾Ð²Ð¾Ð»ÐµÐ½ аÑгÑменÑом end, ÑавнÑм undefined
end = typeof end !== "undefined" ? end : this.length;
// ÐÐ»Ñ ÑоднÑÑ
обÑекÑов Array Ð¼Ñ Ð¸ÑполÑзÑем ÑоднÑÑ ÑÑнкÑÐ¸Ñ slice
if (Object.prototype.toString.call(this) === "[object Array]") {
return _slice.call(this, begin, end);
}
// ÐаÑÑивоподобнÑе обÑекÑÑ Ð¼Ñ Ð¾Ð±ÑабаÑÑваем ÑамоÑÑоÑÑелÑно
var i,
cloned = [],
size,
len = this.length;
// ÐбÑабаÑÑваем оÑÑиÑаÑелÑное знаÑение begin
var start = begin || 0;
start = start >= 0 ? start : len + start;
// ÐбÑабаÑÑваем оÑÑиÑаÑелÑное знаÑение end
var upTo = end ? end : len;
if (end < 0) {
upTo = len + end;
}
// ФакÑиÑеÑки ожидаемÑй ÑÐ°Ð·Ð¼ÐµÑ ÑÑеза
size = upTo - start;
if (size > 0) {
cloned = new Array(size);
if (this.charAt) {
for (i = 0; i < size; i++) {
cloned[i] = this.charAt(start + i);
}
} else {
for (i = 0; i < size; i++) {
cloned[i] = this[start + i];
}
}
}
return cloned;
};
}
})();
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
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