. .
/
:
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
// now 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"];
//
arr.splice(0, 3, "Let's", "dance");
alert( arr ) // now ["Let's", "dance", "right", "now"]
splice :
let arr = ["I", "study", "JavaScript", "right", "now"];
//
let removed = arr.splice(0, 2);
alert( removed ); // "I", "study" <-- array of removed elements
splice . deleteCount 0 :
let arr = ["I", "study", "JavaScript"];
// 2
// 0
// "language" "complex"
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- )
: arr.slice() arr . .
concat
:
arr.concat(arg1, arg2...)
.
arr arg1 arg2 .
argN . .
:
let arr = [1, 2];
// [3,4] arr :
alert( arr.concat([3, 4]) ); // 1,2,3,4
// [3,4] [5,6] arr :
alert( arr.concat([3, 4], [5, 6]) ); // 1,2,3,4,5,6
// [3,4] 5 6 arr :
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 : :
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) {
// ...
});
:
// alert
["Bilbo", "Gandalf", "Nazgul"].forEach(alert);
:
["Bilbo", "Gandalf", "Nazgul"].forEach((item, index, array) => {
alert(`${item} is at index ${index} in ${array}`);
});
( ) .
.
indexOf/lastIndexOf and includes
arr.indexOf(item, from)fromitem1-.arr.includes(item, from)fromitemtrue.
: (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 .
item arr.includes .
arr.lastIndexOf indexOf .
let fruits = ['Apple', 'Orange', 'Apple']
alert( arr.indexOf('Apple') ); // 0 (Apple )
alert( arr.lastIndexOf('Apple') ); // 2 (Apple )
````smart header=" `includes` `NaN` "
`includes` `NaN` `indexOf`:
```js run
const arr = [NaN];
alert( arr.indexOf(NaN) ); // -1 ( 0 )
alert( arr.includes(NaN) );// true ( )
includes .
find findIndex/findLastIndex
.
:
let result = arr.find(function(item, index, array) {
// true
// undefined falsy
});
:
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 .
item => item.id == 1 find . .
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 .
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 .
:
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 .
alert :
[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 and join
. : John, Pete, Mary. .
str.split(delim) . delim .
space :
let names = 'Bilbo, Gandalf, Nazgul';
let arr = names.split(', ');
for (let name of arr) {
alert( `A message to ${name}.` ); // A message to Bilbo ( )
}
split . . :
let arr = 'Bilbo, Gandalf, Nazgul, Saruman'.split(', ', 2);
alert(arr); // Bilbo, Gandalf
split(s) s :
let str = "test";
alert( str.split('') ); // t,e,s,t
arr.join(glue) split . arr glue .
:
let arr = ['Bilbo', 'Gandalf', 'Nazgul'];
let str = arr.join(';'); // ;
alert( str ); // Bilbo;Gandalf;Nazgul
reduce/reduceRight
forEach for for..of .
map .
arr.reduce arr.reduceRight . .
:
let value = arr.reduce(function(accumulator, item, index, array) {
// ...
}, [initial]);
.
:
accumulatorinitial(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)0current1.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) reduce
let result = arr.reduce((sum, current) => sum + current);
alert( result ); // 15
. reduce .
.
. reduce .
:
let arr = [];
// Error: Reduce of empty array with no initial value
// . reduce
arr.reduce((sum, current) => sum + current);
.
## Array.isArray
. .
typeof :
alert(typeof {}); // object
alert(typeof []); // object ()
: Array.isArray(value). value true 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 func this .
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}
];
// true army.canJoin user
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( ) .concat(...items):items.items.
-
:
indexOf/lastIndexOf(item, pos)positem1-.includes(value)valuetruefalse.find/filter(func)/true.findIndexfind.
-
:
forEach(func)func.
-
:
map(func)func.sort(func).reverse().split/join.reduce/reduceRight(func, initial)func.
-
:
Array.isArray(arr)arrtruefalse.
sort reverse splice .
99% . :
-
fnmap.truetruefalse.||&&:fntruthyarr.some()truefnfalsyarr.every()false.everyfunction 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)
valuestartend. -
arr.copyWithin(target, start, end)
startendtarget( ).
. .
. .
. . .
<code><pre>. (plnkr jsbin codepen)