大家好,又见面了,我是你们的朋友全栈君。
let arr = [1,2,3]
console.log( Array.isArray(arr) )// true
console.log( Array.isArray([]) ) //true
const array = new Array();
array instanceof Array; //true
const array = new Array();
array.constructor === Array; // true
let items = new Array(2);
console.log(items.length); // 2
console.log(items[0]); // undefined
console.log(items[1]); // undefined
let items = new Array('a')
console.log(items.length); // 1
console.log(items[0]); // a
console.log(items[1]); // undefined
let items = new Array('a','b','c')
console.log(items.length); // 3
console.log(items[0]); // a
console.log(items[1]); // b
let items = Array.of(2);
console.log(items.length); // 1
console.log(items[0]); // 2
let items = Array.of(2,3);
console.log(items.length); // 2
console.log(items[0]); // 2
let str = "hello";
let arr = [...str];
console.log(arr); // ["h", "e", "l", "l", "o"]
let str = "hello";
let arr = Array.from(str);
console.log(arr); // ["h", "e", "l", "l", "o"]
Array.from() 可接收三个参数,第一个参数为类数组对象,第二个参数为映射函数,如果使用了映射函数,可以传第三个参数表示映射函数的this值。
function translate () {
return Array.from(arguments, (value) => value+1);
}
let numbers = translate(1, 2, 3);
console.log(numbers); // [2, 3, 4]
let helper = {
add (value) {
return value+1;
}
}
function translate () {
return Array.from(arguments, helper.add, helper);
}
let numbers = translate(1, 2, 3);
console.log(numbers); // [2, 3, 4]
let numbers = [1, 2, 3, 4, 5];
console.log(numbers.find(n => n > 3)); // 4
console.log(numbers.findIndex(n => n > 3)); // 3
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, NaN].includes(NaN); // true
var arr = ['a', 'b', 'c'];
arr.includes('a', 1); //true
arr.includes('a', 2); //false
arr.includes('c', 3); //false
arr.includes('c', 100); // false
var arr = ['a', 'b', 'c'];
arr.includes('a', -2); // false
arr.includes('a', -100); // true
[2, 9, 7, 8, 9].indexOf(9); // 1
[2, 9, 7, 8, 9].lastIndexOf(9); // 4
forEach() 不能中断遍历,没有返回值
let arr = [1, 2, 3];
arr.forEach((item, index, arr) => {
console.log(item)
})
map() 返回一个新的数组
let arr = [1, 2, 3];
let newArr = arr.map((item, index, arr) => {
return item * 2;
})
console.log(arr) // [1, 2, 3]
console.log(newArr) // [2, 4, 6]
filter() 可以过滤数组,包含满足条件的数组项,返回一个新数组
let arr = [1, 2, 3];
let newArr = arr.filter((item, index, arr) => {
return item <= 2;
})
console.log(arr) // [1, 2, 3]
console.log(newArr) // [1, 2]
some() 返回布尔值,如果有一个满足条件的值则返回true
let arr = [1, 2, 3];
let result = arr.some((item, index, arr) => {
return item < 2;
})
console.log(result) // true
every() 返回布尔值,如果所有数组项都满足条件则返回true
let arr = [1, 2, 3];
let result = arr.every((item, index, arr) => {
return item < 2;
})
console.log(result) // false
keys() 返回一个包含数组中每个索引键的Array Iterator对象。
let arr = ['a', 'b', 'c'];
let iterator = arr.keys()
for (let key of iterator) {
console.log(key); // expected output: 0 1 2
}
对象也有相应的方法,获取对象所有属性的键
var arr = ["a", , "c"];
var sparseKeys = Object.keys(arr);
var denseKeys = [...arr.keys()];
console.log(sparseKeys); // ['0', '2']
console.log(denseKeys); // [0, 1, 2]
values() 方法返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值。
let arr = ['a', 'b', 'c'];
let iterator = arr.values();
for (const value of iterator) {
console.log(value); // expected output: "a" "b" "c"
}
对象也有相应的方法,获取对象所有属性的值
var arr = ["a", , "c"];
var sparseKeys = Object.values(arr);
var denseKeys = [...arr.values()];
console.log(sparseKeys); // ["a", "c"]
console.log(denseKeys); // ["a", undefined, "c"]
entries() 方法返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。
var arr = ["a", "b", "c"];
var iter = arr.entries();
var a = [];
// for(var i=0; i< arr.length; i++){ // 实际使用的是这个
for(var i=0; i< arr.length+1; i++){
// 注意,是length+1,比数组的长度大
var tem = iter.next(); // 每次迭代时更新next
console.log(tem.done); // 这里可以看到更新后的done都是false
if(tem.done !== true){
// 遍历迭代器结束done才是true
console.log(tem.value);
a[i]=tem.value;
}
}
console.log(a); // 遍历完毕,输出next.value的数组
对象也有相应的方法,获取对象所有属性的键值对
const obj = {
foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]
const array = [1, 2, 3];
const length = array.push(4, 5);
// array: [1, 2, 3, 4, 5]; length: 5
const array = [1, 2, 3];
const length = array.unshift(4, 5);
// array: [ 4, 5, 1, 2, 3]; length: 5
const array = [1, 2, 3];
const poped = array.pop();
// array: [1, 2]; poped: 3
4.array.shift()删除数组的第一个元素,并返回第一个元素,原数组的第一个元素被删除。数组为空时返回undefined。
const array = [1, 2, 3];
const shifted = array.shift();
// array: [2, 3]; shifted: 1
const array = [1, 2, 3, 4, 5];
const deleted = array.splice(2, 0, 6); // 在索引为2的位置插入6
// array 变为 [1, 2, 6, 3, 4, 5]; deleted为[]
数组转字符串
const array = [1, 2, 3];
let str = array.join(',');
// str: "1,2,3"
var colors = ["red", "blue", "green"];
// 调用数组的 toString()方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串
console.log(colors.toString()); // red,blue,green
// 调用 valueOf()返回的还是数组
console.log(colors.valueOf()); // ["red", "blue", "green"]
console.log(colors.toLocaleString()); // red,blue,green
字符串转数组
let str = "abc,abcd,aaa";
let array = str.split(",");// 在每个逗号(,)处进行分解。
// array: [abc,abcd,aaa]
const array1 = "helloworld";
let str1 = array1.split('');
//["h", "e", "l", "l", "o", "w", "o", "r", "l", "d"]
数组的截取 – array.slice(start, end) 方法
// 获取仅包含最后一个元素的子数组
let array = [1,2,3,4,5];
array.slice(-1); // [5]
// 获取不包含最后一个元素的子数组
let array2 = [1,2,3,4,5];
array2.slice(0, -1); // [1,2,3,4]
数组的合并 – array.concat([item1[, item2[, . . . [,itemN]]]])方法
conact()是将多个数组(也可以是字符串,或者是数组和字符串的混合)连接为一个数组,返回连接好的新的数组。
const array = [1,2].concat(['a', 'b'], ['name']);
// [1, 2, "a", "b", "name"]
array.sort() 用于对数组的元素进行排序,并返回原数组。如果不带参数,按照字符串UniCode码的顺序进行排序。自定义排序规则:(1)传两个形参;(2)当返回值为正数时,交换传入两形参在数组中位置。
const array = ['a', 'd', 'c', 'b'];
array.sort(); //['a', 'b', 'c', 'd']
//按照数值大小进行排序-升序
[1, 8, 5].sort((a, b) => {
return a-b; // 从小到大排序
});
// [1, 5, 8]
//按照数值大小进行排序-降序
[1, 8, 5].sort((a, b) => {
return b-a; // 从大到小排序
});
// [8, 5, 1]
array.reverse() 将数组中元素的位置颠倒,第一个数组元素成为最后一个数组元素,最后一个数组元素成为第一个。在原数组上操作,然后返回原数组。
let arr = [1,2,3,4,5]
console.log(arr.reverse()) // [5,4,3,2,1]
console.log(arr) // [5,4,3,2,1]
let arr=['1','a','a','3','1']
let a=Array.from(new Set(arr))
//或者这么写,用扩展运算符(...),扩展运算符内部调用的是数据结构的 Iterator 接口
let a=[...new Set(arr)]
//结果a为["1" , "a" , "3"]
扩展运算符(spread)是三个点(…)。它好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。
console.log(...[1,2,3]) //1,2,3
['a', 'b',...[1,3]] //a,b,1,3
function add(x, y) {
return x + y;
}
const numbers = [4, 38];
add(...numbers) // 42
*********************************************************
function push(a, arr){
a.push(...arr);
}
*********************************************************
function add(a, b){
return a+b;
}
var arr=[1,8];
add(...arr);
*********************************************************
function add(x,y,z,n,m){
return x+y+z+n+m;
}
var a = [1,2,3]
add(1,...a,3);
//es6
Math.max(...[1,2,3,5])
//将一个数组插入到到一个数组的尾部
1)Array.prototype.push(arr1,arr2);
2)arr1 = arr1.concat(arr2);
3)arr1.push(...arr2);
//复制数组
arr1 = arr.concat()
arr1 = arr.splice(0)
arr1 = [...arr]
//结构赋值
const [a, ...b] = [1,2,3,4] //a=1 b=[2,3,4] //扩展只能用在最后一个
const someValue = 0;
const defaultValue = 100;
let value = someValue ?? defaultValue; // someValue 为 0 ,value 的值是 0
例如,我们要访问 info 对象的 animal 的 reptile 的 tortoise。
但是我们不确定 animal, reptile 是否存在,因此我们需要这样写:
const tortoise = info.animal && info.animal.reptile && info.animal.reptile.tortoise;
因为 null.reptile 或 undefined.reptile 会抛出错误:TypeError: Cannot read property 'reptile' of undefined 或 TypeError: Cannot read property 'reptile' of null,为了避免报错,如果我们需要访问的属性更深,那么这个这句代码会越来越长。
有了可选链之后我们就可以简化:
const tortoise = info.animal?.reptile?.tortoise;
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133314.html原文链接:https://javaforall.cn