. , .
/
, :
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
, , , 3 arr.length == 3.
, , delete obj.key key. , , , . , .
.
arr.splice . : , .
:
arr.splice(start[, deleteCount, elem1, ..., elemN])
arr start: deleteCount elem1, ..., elemN . .
.
:
let arr = ["I", "study", "JavaScript"];
arr.splice(1, 1); // 1 1
alert( arr ); // ["I", "JavaScript"]
, ? 1, 1 .
3 :
let arr = ["I", "study", "JavaScript", "right", "now"];
// 3
arr.splice(0, 3, "Let's", "dance");
alert( arr ) // ["Let's", "dance", "right", "now"]
, splice :
let arr = ["I", "study", "JavaScript", "right", "now"];
// 2
let removed = arr.splice(0, 2);
alert( removed ); // "I", "study" <--
splice - . 0 deleteCount:
let arr = ["I", "study", "JavaScript"];
// 2
// 0
// "complex" "language"
arr.splice(2, 0, "complex", "language");
alert( arr ); // "I", "study", "complex", "language", "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: "something",
length: 1
};
alert( arr.concat(arrayLike) ); // 1,2,[object Object]
Symbol.isConcatSpreadable, concat : . length:
let arr = [1, 2];
let arrayLike = {
0: "something",
1: "else",
[Symbol.isConcatSpreadable]: true,
length: 2
};
alert( arr.concat(arrayLike) ); // 1,2,something,else
: forEach
:
arr.forEach(function(item, index, array) {
// ... item
});
, :
// alert
["Bilbo", "Gandalf", "Nazgul"].forEach(alert);
:
["Bilbo", "Gandalf", "Nazgul"].forEach((item, index, array) => {
alert(`${item} ${index} ${array}`);
});
( ) .
, - .
indexOf/lastIndexOf includes
arr.indexOf arr.includes , , :
arr.indexOf(item, from)item,from, , ,-1.arr.includes(item, from)item,from,true, .
: 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
, indexOf ===. , false, false, .
item , , arr.includes.
arr.lastIndexOf , indexOf, .
let fruits = ['Apple', 'Orange', 'Apple']
alert( fruits.indexOf('Apple') ); // 0 ( Apple)
alert( fruits.lastIndexOf('Apple') ); // 2 ( Apple)
includes NaN, includes , NaN, indexOf:
const arr = [NaN];
alert( arr.indexOf(NaN) ); // -1 ( 0, === NaN)
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: "John"},
{id: 2, name: "Pete"},
{id: 3, name: "Mary"}
];
let user = users.find(item => item.id == 1);
alert(user.name); // John
, find .
, find item => item.id == 1, . , .
arr.findIndex , , , , , -1, .
arr.findLastIndex findIndex, , lastIndexOf.
:
let users = [
{id: 1, name: "John"},
{id: 2, name: "Pete"},
{id: 3, name: "Mary"},
{id: 4, name: "John"}
];
// John
alert(users.findIndex(user => user.name == 'John')); // 0
// John
alert(users.findLastIndex(user => user.name == 'John')); // 3
filter
find () , - true.
, , arr.filter(fn).
find, filter :
let results = arr.filter(function(item, index, array) {
// true - ,
// ,
});
:
let users = [
{id: 1, name: "John"},
{id: 2, name: "Pete"},
{id: 3, name: "Mary"}
];
//
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 = ["Bilbo", "Gandalf", "Nazgul"].map(item => item.length);
alert(lengths); // 5,7,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( `A message to ${name}.` ); // : ( )
}
split . , , . :
let arr = ', , , '.split(', ', 2);
alert(arr); // ,
split(s) s :
let str = "test";
alert( str.split('') ); // t,e,s,t
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, 2 .
, .
-
suminitial(reduce),0,current,1. ,1. -
sum = 1, (2). -
sum = 3, ,
:
, :
sum |
current |
||
|---|---|---|---|
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
Javascript. .
typeof :
alert(typeof {}); //
alert(typeof []); //
, : 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),arr.pop(),arr.shift(),arr.unshift(...items).splice(pos, deleteCount, ...items)pos,deleteCountitems.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(func, initial),func.
-
:
Array.isArray(value),value, ,true,false.
, sort, reverse splice .
99% , .
fn , map. -/ 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)