数组

splice:

splice() 方法的第一个参数是起始索引,第二个参数是要删除的元素数量(可以为0),然后可以传递更多的参数作为要插入的新元素。

限制删除的数量:
const arr = [1, 2, 3, 4, 5];
const removed = arr.splice(0, 3);
console.log(arr); // Output: [4, 5]
console.log(removed); // Output: [1, 2, 3]
------------------------------------------
删除所有元素:
const arr = [1, 2, 3, 4, 5];
const removed = arr.splice(0);
console.log(arr); // Output: []
console.log(removed); // Output: [1, 2, 3, 4, 5]
------------------------------------------
从末尾删除元素:
const arr = [1, 2, 3, 4, 5];
const removed = arr.splice(-2);
console.log(arr); // Output: [1, 2, 3]
console.log(removed); // Output: [4, 5]
------------------------------------------
删除并插入元素:
const arr = [1, 2, 3, 4, 5];
const removed = arr.splice(1, 2, 'a', 'b', 'c');//在index是1的位置删除2个元素,并添加'a','b','c'
console.log(arr); // Output: [1, 'a', 'b', 'c', 4, 5]
console.log(removed); // Output: [2, 3]
------------------------------------------
替换元素:
const arr = [1, 2, 4, 5];
const replaced = arr.splice(2, 1, 'a', 'b');
console.log(arr); // Output: [1, 2, 'a', 'b', 5]
console.log(replaced); // Output: [4]
------------------------------------------
插入元素:
const arr = [1, 2, 4, 5];
arr.splice(2, 0, 3);//在index为2的位置,删除0个元素,并添加3
console.log(arr); // Output: [1, 2, 3, 4, 5]
------------------------------------------
删除元素:
const arr = [1, 2, 3, 4, 5];
const removed = arr.splice(2, 1);
console.log(arr); // Output: [1, 2, 4, 5]
console.log(removed); // Output: [3]

pop(), push(), shift(), unshift()

const arr = [1, 2, 3];
arr.pop();
console.log(arr); // Output: [1, 2] arr.push(4);
console.log(arr); // Output: [1, 2, 4] arr.shift();
console.log(arr); // Output: [2, 4] arr.unshift(0);
console.log(arr); // Output: [0, 2, 4]

copyWithin()

copyWithin() 方法在数组内部进行浅拷贝,并将指定位置的元素复制到其他位置。它接受两个参数:目标索引(target)和源索引(start)以及可选的结束索引(end)。该方法会修改原始数组,不会创建新的数组。下面是对 copyWithin() 方法的详细解释以及相应的示例代码:

copyWithin() 方法的语法如下:

arr.copyWithin(target, start, end)

target(必需):要复制到的目标索引位置。

start(可选):要复制的源起始索引位置。

end(可选):要复制的源结束索引位置(不包含该索引)。

const arr = [1, 2, 3, 4, 5];
arr.copyWithin(0, 3); // 将索引3及之后的元素复制到索引0及之后的位置
console.log(arr); // Output: [4, 5, 3, 4, 5]

在上面的示例中,我们将索引为3的元素(4, 5)复制到索引为0的位置开始,结果是原始数组被修改为 [4, 5, 3, 4, 5]。

复制特定范围内的元素:

const arr = [1, 2, 3, 4, 5];
arr.copyWithin(1, 2, 4);
console.log(arr); // Output: [1, 3, 4, 4, 5]

复制到末尾:

const arr = [1, 2, 3, 4, 5];
arr.copyWithin(2, 0);
console.log(arr); // Output: [1, 2, 1, 2, 3]

在上面的示例中,我们从索引为0的位置开始复制,将复制的元素粘贴到索引为2的位置,直到末尾。结果是原始数组被修改为 [1, 2, 1, 2, 3]。

fill()

fill() 方法用于将数组中的元素替换为静态值,从指定的起始索引位置开始,到指定的结束索引位置结束(不包括结束索引位置)。它会修改原始数组,不会创建新的数组。下面是对 fill() 方法的详细解释以及相应的示例代码:

arr.fill(value, start, end)

参数说明:

value(必需):用于替换数组元素的静态值。

start(可选):替换开始的起始索引位置,默认为 0。

end(可选):替换结束的索引位置(不包括该位置),默认为数组长度。

const arr = [1, 2, 3, 4, 5];
arr.fill(0);
console.log(arr); // Output: [0, 0, 0, 0, 0]

替换特定范围内的元素:

const arr = [1, 2, 3, 4, 5];
arr.fill('a', 1, 4);
console.log(arr); // Output: [1, 'a', 'a', 'a', 5]

在上面的示例中,我们从索引为1的位置开始,替换到索引为4的位置结束(不包括索引4)。结果是原始数组被修改为 [1, 'a', 'a', 'a', 5]。

替换从末尾开始的元素:

const arr = [1, 2, 3, 4, 5];
arr.fill('b', -3);
console.log(arr); // Output: [1, 2, 'b', 'b', 'b']

在上面的示例中,我们从倒数第三个元素开始,将之后的所有元素替换为静态值 'b'。结果是原始数组被修改为 [1, 2, 'b', 'b', 'b']。

reverse()

const arr = [1, 2, 3];
arr.reverse();
console.log(arr); // Output: [3, 2, 1]

sort()

const arr = [3, 2, 1];
arr.sort();
console.log(arr); // Output: [1, 2, 3]

join()

const arr = ['Hello', 'World'];
const joined = arr.join(' ');
console.log(joined); // Output: "Hello World"

forEach()

const arr = [1, 2, 3];
arr.forEach(item => {
console.log(item);
});
// Output:
// 1
// 2
// 3

map()

const arr = [1, 2, 3];
const doubled = arr.map(item => item * 2);
console.log(doubled); // Output: [2, 4, 6]

filter()

const arr = [1, 2, 3, 4, 5];
const evenNumbers = arr.filter(item => item % 2 === 0);
console.log(evenNumbers); // Output: [2, 4]

indexOf()

const arr = [1, 2, 3, 4, 5];
const index = arr.indexOf(3);
console.log(index); // Output: 2

lastIndexOf()

const arr = [1, 2, 3, 4, 3, 5];
const lastIndex = arr.lastIndexOf(3);
console.log(lastIndex); // Output: 4

reduce(),reduceRight()

reduce() 方法和 reduceRight() 方法都是用于数组的迭代方法,它们可以通过对数组中的元素进行累积计算来返回一个最终的值。它们的差异在于迭代的方向不同。下面是对 reduce() 和 reduceRight() 方法的详细解释以及相应的示例代码:

reduce() 方法:

reduce() 方法从数组的左侧开始迭代元素,依次将每个元素和累加器进行操作。

它接受两个参数:回调函数和可选的初始值。

回调函数接受四个参数:累加器(accumulator),当前元素(current value),当前索引(index),原始数组(array)。

回调函数返回的值将作为下一次迭代的累加器的值。

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // Output: 15

在上面的示例中,我们使用 reduce() 方法对数组中的元素进行累加计算,并将初始值设置为 0。最终的结果是所有元素的和,即 15。

reduceRight() 方法:

reduceRight() 方法从数组的右侧开始迭代元素,依次将每个元素和累加器进行操作。

它接受两个参数:回调函数和可选的初始值。

回调函数接受四个参数:累加器(accumulator),当前元素(current value),当前索引(index),原始数组(array)。

回调函数返回的值将作为下一次迭代的累加器的值。

const numbers = [1, 2, 3, 4, 5];
const concatenated = numbers.reduceRight((accumulator, currentValue) => accumulator + currentValue, '');
console.log(concatenated); // Output: '54321'

在上面的示例中,我们使用 reduceRight() 方法将数组中的元素从右侧开始拼接成一个字符串,并将初始值设置为空字符串。最终的结果是逆序拼接的字符串,即 '54321'。

无论是 reduce() 还是 reduceRight() 方法,你可以根据需求选择合适的方法来实现对数组的累积计算。在回调函数中,你可以根据需要对累加器和当前元素进行任意操作,并返回下一次迭代的累加器的值。

在 reduce() 方法中,可选的第二个参数是初始值(initial value),它指定了累加器的初始值。如果不提供初始值,则默认使用数组的第一个元素作为初始值,并从数组的第二个元素开始迭代。

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue);
console.log(sum); // Output: 15

在上面的示例中,我们没有提供初始值,因此 reduce() 方法会将数组的第一个元素(1)作为初始值,并从数组的第二个元素(2)开始进行累加计算。

现在,让我们给出一个使用回调函数接受四个参数的示例:

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue, index, array) => {
console.log(`accumulator: ${accumulator}, currentValue: ${currentValue}, index: ${index}, array: ${array}`);
return accumulator + currentValue;
}, 0);
console.log(sum); // Output: 15

对象常用方法示例

keys()

const obj = { a: 1, b: 2, c: 3 };
const keys = Object.keys(obj);
console.log(keys); // Output: ["a", "b", "c"]

values()

const obj = { a: 1, b: 2, c: 3 };
const values = Object.values(obj);
console.log(values); // Output: [1, 2, 3]

entries()

const obj = { a: 1, b: 2, c: 3 };
const entries = Object.entries(obj);
console.log(entries); // Output: [["a", 1], ["b", 2], ["c", 3]]

hasOwnProperty()

const obj = { a: 1, b: 2 };
console.log(obj.hasOwnProperty('a')); // Output: true
console.log(obj.hasOwnProperty('c')); // Output: false

defineProperty()

Object.defineProperty() 是 JavaScript 中用于定义或修改对象属性的方法。它允许我们精确地定义属性的特性,如可写性(writable)、可枚举性(enumerable)、可配置性(configurable)和获取或设置属性值的方法。

Object.defineProperty(object, propertyName, descriptor)

参数解释:

object: 要定义或修改属性的对象。

propertyName: 要定义或修改的属性名。

descriptor: 描述符对象,包含要定义或修改的属性的特性。

描述符对象 descriptor 可以包含以下属性:

value: 设置属性的值。可以是任何有效的 JavaScript 数据类型。默认为 undefined。

writable: 布尔值,指示属性是否可写。如果为 true,则属性的值可以被修改。默认为 false。

enumerable: 布尔值,指示属性是否可枚举。如果为 true,则该属性可以在 for...in 循环中被枚举。默认为 false。

configurable: 布尔值,指示属性是否可配置。如果为 true,则该属性的描述符可以被修改,属性可以被删除。默认为 false。

get: 一个函数,用于获取属性的值。当访问该属性时,该函数会被调用,并返回属性的值。默认为 undefined。

set: 一个函数,用于设置属性的值。当修改该属性的值时,该函数会被调用。默认为 undefined。

const person = {};

Object.defineProperty(person, 'name', {
value: 'John',
writable: false,
enumerable: true,
configurable: false
}); console.log(person.name); // 输出: John
person.name = 'Jane'; // 不会修改成功,因为 writable 被设置为 false
console.log(person.name); // 输出: John // 尝试删除属性,但因为 configurable 被设置为 false,所以删除操作无效
delete person.name;
console.log(person.name); // 输出: John

Object.defineProperty() 是一种强大的工具,可以用于在 JavaScript 对象中创建高度控制的属性。这在创建不可修改的常量、定义隐藏属性或实现数据绑定等场景中非常有用。值得注意的是,在 ES6 中引入了更简洁的 class 和 get、set 语法,它们可以更方便地实现类似的功能。

JS中常用方法的更多相关文章

  1. common.js js中常用方法

    //创建CSS样式段 //classid: CSS样式段ID//font: 字体//size: 字体大小//color: 字体颜色//style: 字体风格function FCMakeCSSClas ...

  2. Js 中常用方法

    一.获取唯一值(2014-12-23) function newGuid() { var guid = ""; var n = (((1 + Math.random()) * 0x ...

  3. js中数组Array的一些常用方法总结

    var list = new Array()是我们在js中常常写到的代码,今天就总结一下Array的对象具有哪些方法. list[0] = 0; list[1] = 1; list[2] = 2; 或 ...

  4. JS中字符串与数组的一些常用方法

    真是恨透了这些类似于substring substr slice 要么长得像,要么就功能相近的方法... 1⃣️string 1.substring(start开始位置的索引,end结束位置索引) 截 ...

  5. JS中String与Array的一些常用方法

    真是恨透了这些类似于substring substr slice 要么长得像,要么就功能相近的方法... 1⃣️string 1.substring(start开始位置的索引,end结束位置索引) 截 ...

  6. js中的各种获取日期

    JS中获取当前时间点前一天时间 var date=new Date(); var dat_year=date.getYear(); var dat_month=date.getMonth(); var ...

  7. js中cookie操作

    js中操作Cookie的几种常用方法 * cookie中存在域的概念,使用path和domain区分: * 在同一域中的set和del可以操作同一名称的cookie,但不在同一域中的情况下,则set无 ...

  8. js中Frame框架的属性获取(1)

    js中window和document对象及如何操作iframe 一. window对象 . 什么是window对象? Window对象表示浏览器打开的窗口.如果文档包含iframe或者是frame标签 ...

  9. JS中的函数、Bom、DOM及JS事件

    本期博主给大家带来JS的函数.Bom.DOM操作,以及JS各种常用的数据类型的相关知识,同时,这也是JavaScript极其重要的部分,博主将详细介绍各种属性的用法和方法. 一.JS中的函数 [函数的 ...

  10. 细看JS中的BOM、DOM对象

                                        DOM对象模型  DOM(Document Object Model),是指文档对象模型,是W3C组织推荐的处理可扩展标志语言的 ...

随机推荐

  1. Docker 容器的数据卷 以及 数据卷容器

    Docker 容器删除后,在容器中产生的数据还在吗? 答案是 不在 Docker 容器和外部机器可以直接交换文件吗? 在没有数据卷的情况下,答案是 不可以 如下图:外部机器:Windows系统(自己的 ...

  2. Redis集群(cluster模式)搭建(三主三从)

    上一篇搭建了一主二从,并加入了哨兵,任何一个节点挂掉都不影响正常使用,实现了高可用.仍然存在一个问题,一主二从每个节点都存储着全部数据,随着业务庞大,数据量会超过节点容量,即便是redis可以配置清理 ...

  3. Vue3组合式API终极指南:从原理到实战,彻底掌握高效开发!

    前言 在Vue3从发布到今天,组合式API已成为现代前端开发的标杆设计模式.本文通过真实项目场景,深度解析组合式API的核心特性,配以完整代码示例,助你彻底掌握企业级Vue应用开发精髓. 一.为什么组 ...

  4. rust学习笔记(2)

    类型 有符号整数(signed integers):i8.i16.i32.i64.i128 和 isize(指针宽度) 无符号整数(unsigned integers): u8.u16.u32.u64 ...

  5. leetcode两数之和变种(找出所有满足总和的两个数)

    偶尔看到leetcode 的两数之和,但是之前遇到过两数之和的变种,之前一开始想不出来,后面看了别人的题解才想到解法,这里记录一下. 题目描述: 原leetcode题目描述 给定一个整数数组 nums ...

  6. linux curl 测试 websocket 服务

    如下 curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: ec ...

  7. GBJ 97-1987 水泥混凝土路面施工及验收规范(电子版)PDF 版本 下载

    本规范适用于新建和改建的公路 城市道路 厂矿道路和民航机场道面等就地浇筑的水泥混凝土路面的施工及验收 链接:https://pan.baidu.com/s/17t88jnEU6IrptmEWsyuN3 ...

  8. VMware虚拟化的CPU调度原理及实践建议

    简介: ESXi的CPU调度原理及实践建议 ESXi的CPU调度原理 CPU调度器的设计目标 公平性:确保虚机按照各自配置的份额占用物理CPU.吞吐量:最大化物理CPU的使用率.响应性:vCPU从'就 ...

  9. 元模型对AI的哲学意义:让机器真正"懂"世界

    元模型对AI的哲学意义:让机器真正"懂"世界 (用日常语言和比喻解释) 1. 传统AI像"死记硬背的学生" 问题:现在的ChatGPT就像背了无数词典的人,能对 ...

  10. Python+硅基流动API实现小说转有声读物

    一.注册硅基流动账号获取文本转语音api 1.注册登录硅基流动 注册.登录硅基流动 查看apikey 查看赠送的免费额度 点击文档中心 2.查看文本转语音api 查看文本转语音api 查看api使用指 ...