. , .
/
, :
arr.push(...items),arr.pop(),arr.shift(),arr.unshift(...items).
.
splice
?
, delete:
let arr = ["I", "go", "home"];
delete arr[1]; // "go"
alert( arr[1] ); // undefined
// arr = ["I", , "home"];
alert( arr.length ); // 3
, , , arr.length == 3.
, delete obj.key key. , . . , . , .
.
arr.splice . : , .
:
arr.splice(start[, deleteCount, elem1, ..., elemN])
arr start: deleteCount elem1, ..., elemN . .
, .
:
let arr = ["", "", "JavaScript"];
arr.splice(1, 1); // 1, 1
alert( arr ); // ["", "JavaScript"]
, ? 1, 1 .
3 .
let arr = ["", "", "JavaScript", "", ""];
// 3
arr.splice(0, 3, "", "");
alert( arr ) // ["", "", "", ""]
, splice :
let arr = ["", "", "JavaScript", "", ""];
// 2
let removed = arr.splice(0, 2);
alert( removed ); // "", "" <--
splice , deleteCount 0:
let arr = ["", "", "JavaScript"];
// 2
// 0
// "", ""
arr.splice(2, 0, "", "");
alert( arr ); // "", "", "", "", "JavaScript"
. , :
let arr = [1, 2, 5];
// -1 ( )
// 0 ,
// 3 4
arr.splice(-1, 0, 3, 4);
alert( arr ); // 1,2,3,4,5
slice
arr.slice , arr.splice.
:
arr.slice([start], [end])
, start end ( end). start end , .
str.slice, .
:
let arr = ["t", "e", "s", "t"];
alert( arr.slice(1, 3) ); // e,s ( 1 3)
alert( arr.slice(-2) ); // s,t ( -2 )
slice : arr.slice() arr. , , .
concat
arr.concat , .
:
arr.concat(arg1, arg2...)
, , .
, arr, arg1, arg2 .
argN , . .
:
let arr = [1, 2];
// : arr [3,4]
alert( arr.concat([3, 4]) ); // 1,2,3,4
// : arr [3,4] [5,6]
alert( arr.concat([3, 4], [5, 6]) ); // 1,2,3,4,5,6
// : arr [3,4], 5 6
alert( arr.concat([3, 4], 5, 6) ); // 1,2,3,4,5,6
. , , :
let arr = [1, 2];
let arrayLike = {
0: "-",
length: 1
};
alert( arr.concat(arrayLike) ); // 1,2,[object Object]
Symbol.isConcatSpreadable, , concat: :
let arr = [1, 2];
let arrayLike = {
0: "-",
1: "",
[Symbol.isConcatSpreadable]: true,
length: 2
};
alert( arr.concat(arrayLike) ); // 1,2,-,
: forEach
:
arr.forEach(function(item, index, array) {
// ... - item
});
, :
// alert
["", "", ""].forEach(alert);
:
["", "", ""].forEach((item, index, array) => {
alert(` ${item} ${index} ${array}`);
});
( - ) .
.
indexOf/lastIndexOf includes
arr.indexOf arr.includes , , :
arr.indexOf(item, from)itemfrom, ,-1.arr.includes(item, from)itemfromtrue, .
: item. .
:
let arr = [1, 0, false];
alert( arr.indexOf(0) ); // 1
alert( arr.indexOf(false) ); // 2
alert( arr.indexOf(null) ); // -1
alert( arr.includes(1) ); // true
, , ===. , false, false, .
, arr.includes.
arr.lastIndexOf indexOf, .
let fruits = ['', '', '']
alert( fruits.indexOf('') ); // 0 ( '')
alert( fruits.lastIndexOf('') ); // 2 ( '')
includes NaN, includes NaN, indexOf:
const arr = [NaN];
alert( arr.indexOf(NaN) ); // -1 (, 0)
alert( arr.includes(NaN) );// true ()
, includes JavaScript .
find findIndex/findLastIndex
, . ?
:
let result = arr.find(function(item, index, array) {
// true -
// , undefined
});
:
item.index.array.
true, item. , undefined.
, , id name. id == 1:
let users = [
{id: 1, name: ""},
{id: 2, name: ""},
{id: 3, name: ""}
];
let user = users.find(item => item.id == 1);
alert(user.name); //
, find .
, find item => item.id == 1 . , .
arr.findIndex , , , . -1 , .
arr.findLastIndex findIndex, , lastIndexOf.
:
let users = [
{id: 1, name: ""},
{id: 2, name: ""},
{id: 3, name: ""},
{id: 4, name: ""}
];
//
alert(users.findIndex(user => user.name == '')); // 0
//
alert(users.findLastIndex(user => user.name == '')); // 3
filter
find () , true.
find, filter :
let results = arr.filter(function(item, index, array) {
// `true` -- results
// ,
});
:
let users = [
{id: 1, name: ""},
{id: 2, name: ""},
{id: 3, name: ""}
];
// ,
let someUsers = users.filter(item => item.id < 3);
alert(someUsers.length); // 2
.
map
arr.map .
.
:
let result = arr.map(function(item, index, array) {
//
});
, :
let lengths = ["", "", ""].map(item => item.length);
alert(lengths); // 6,8,6
sort(fn)
arr.sort() , .
, , arr.
:
let arr = [ 1, 2, 15 ];
// arr
arr.sort();
alert( arr ); // 1, 15, 2
?
1, 15, 2. . ?
.
, . , , "2" > "15".
, arr.sort().
:
function compare(a, b) {
if (a > b) return 1; //
if (a == b) return 0; //
if (a < b) return -1; //
}
, :
function compareNumeric(a, b) {
if (a > b) return 1;
if (a == b) return 0;
if (a < b) return -1;
}
let arr = [ 1, 2, 15 ];
arr.sort(compareNumeric);
alert(arr); // 1, 2, 15
.
, . arr , ? , , - . - . , , , . .
arr.sort(fn) . , ( Timsort). , . , , fn, .
, - , :
[1, -2, 15, 2, 0, 8].sort(function(a, b) {
alert( a + " <> " + b );
return a - b;
});
, .
, , , .
:
let arr = [ 1, 2, 15 ];
arr.sort(function(a, b) { return a - b; });
alert(arr); // 1, 2, 15
localeCompare reverse
arr.reverse arr .
:
let arr = [1, 2, 3, 4, 5];
arr.reverse();
alert( arr ); // 5,4,3,2,1
arr .
split join
. , , , : , , . - , . ?
str.split(delim) . delim.
.
let names = ', , ';
let arr = names.split(', ');
for (let name of arr) {
alert( ` : ${name}.` ); // : ( )
}
split . , , . :
let arr = ', , , '.split(', ', 2);
alert(arr); // ,
split(s) s :
let str = "";
alert( str.split('') ); // ,,,
arr.join(glue) split. arr, glue .
:
let arr = ['', '', ''];
let str = arr.join(';'); // ;
alert( str ); // ;;
reduce/reduceRight
forEach, for for..of.
map.
arr.reduce arr.reduceRight , . .
:
let value = arr.reduce(function(accumulator, item, index, array) {
// ...
}, [initial]);
.
:
accumulator,initial(initial),item,index,array.
.
, , . reduce.
?
.
:
let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((sum, current) => sum + current, 0);
alert(result); // 15
, reduce, , .
.
-
suminitial(reduce),0,current,1. ,1. -
sum = 1, (2) . -
sum = 3, ,
:
, :
sum |
current |
result |
|
|---|---|---|---|
0 |
1 |
1 |
|
1 |
2 |
3 |
|
3 |
3 |
6 |
|
6 |
4 |
10 |
|
10 |
5 |
15 |
, .
:
let arr = [1, 2, 3, 4, 5];
// ( 0 )
let result = arr.reduce((sum, current) => sum + current);
alert( result ); // 15
! , initial , .
.
. , reduce .
:
let arr = [];
// Error: Reduce of empty array with no initial value
// , reduce .
arr.reduce((sum, current) => sum + current);
.
arr.reduceRight , .
Array.isArray
. .
typeof :
alert(typeof {}); // object
alert(typeof []); // object
, : Array.isArray(value). true, value , false, .
alert(Array.isArray({})); // false
alert(Array.isArray([])); // true
thisArg
, find, filter, map, sort, thisArg.
, , .
:
arr.find(func, thisArg);
arr.filter(func, thisArg);
arr.map(func, thisArg);
// ...
// thisArg --
thisArg this func.
, army , thisArg :
let army = {
minAge: 18,
maxAge: 27,
canJoin(user) {
return user.age >= this.minAge && user.age < this.maxAge;
}
};
let users = [
{age: 16},
{age: 20},
{age: 23},
{age: 30}
];
// , army.canJoin true
let soldiers = users.filter(army.canJoin, army);
alert(soldiers.length); // 2
alert(soldiers[0].age); // 20
alert(soldiers[1].age); // 23
users.filter(army.canJoin), army.canJoin , this=undefined. .
users.filter(army.canJoin, army) users.filter(user => army.canJoin(user)), . , - .
:
-
/ :
push(...items),pop(),shift(),unshift(...items).splice(pos, deleteCount, ...items)posdeleteCountitems.slice(start, end),startend(end).concat(...items):items. -items, .
-
:
indexOf/lastIndexOf(item, pos)item,pos,-1, .includes(value)true,value,false.find/filter(func)/ ,true.findIndexfind, .
-
:
forEach(func)func. .
-
:
map(func)func.sort(func), .reverse().split/join.reduce/reduceRight(func, initial),func.
-
:
Array.isArray(arr),arr.
, , push, pop, shift, unshift, sort, reverse splice .
, 99% . :
-
fnmap. -/true,true,false.,
||&&:fn,arr.some()true;fn,arr.every()false.every:function arraysEqual(arr1, arr2) { return arr1.length === arr2.length && arr1.every((value, index) => value === arr2[index]); } alert( arraysEqual([1, 2], [1, 2])); // true -
arr.fill(value, start, end)
value,startend. -
arr.copyWithin(target, start, end) ,
startend, ,target( ).
MDN.
, , . , .
, , , , , . .
, - , , , . , .
<code>, —<pre>, 10 — (plnkr, JSBin, codepen)