当前位置: 首页 > news >正文

js数组常用方法与技巧

JavaScript 数组基础

JavaScript 数组用于在单一变量中存储多个值。

实例

var cars = ["Saab", "Volvo", "BMW"];

创建数组

使用数组文本是创建 JavaScript 数组最简单的方法。

语法:

var array-name = [item1, item2, ...];

实例

var cars = ["Saab", "Volvo", "BMW"];

访问数组元素

我们通过引用*索引号(下标号)*来引用某个数组元素。

这条语句访问 cars 中的首个元素的值:

var name = cars[0];

这条语句修改 cars 中的首个元素:

cars[0] = "Opel";

改变数组元素

这条语句修改了 cars 中第一个元素的值:

cars[0] = "Opel";

访问完整数组

通过 JavaScript,可通过引用数组名来访问完整数组:

实例

var cars = ["Saab", "Volvo", "BMW"];
document.getElementById("demo").innerHTML = cars; 

length 属性

length 属性返回数组的长度(数组元素的数目)。

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length;                       // fruits 的长度是 4

length 属性始终大于最高数组索引(下标)。

遍历数组元素

遍历数组的最安全方法是使用 “for” 循环:

实例

var fruits, text, fLen, i;

fruits = ["Banana", "Orange", "Apple", "Mango"];
fLen = fruits.length;
text = "<ul>";
for (i = 0; i < fLen; i++) {
     text += "<li>" + fruits[i] + "</li>";
} 

您也可以使用 Array.foreach() 函数:

实例

var fruits, text;
fruits = ["Banana", "Orange", "Apple", "Mango"];

text = "<ul>";
fruits.forEach(myFunction);
text += "</ul>";

function myFunction(value) {
  text += "<li>" + value + "</li>";
}

警告!

添加最高索引的元素可在数组中创建未定义的“洞”:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits[6] = "Lemon";                 // 向 fruits 添加一个新元素 (Lemon)

JavaScript 数组方法

把数组转换为字符串

JavaScript 方法 toString() 把数组转换为数组值(逗号分隔)的字符串。

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.toString(); 

join() 方法也可将所有数组元素结合为一个字符串。

它的行为类似 toString(),但是您还可以规定分隔符:

实例

var fruits = ["Banana", "Orange","Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.join(" * "); 

结果

Banana * Orange * Apple * Mango

Popping

pop() 方法从数组中删除最后一个元素:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.pop();              // 从 fruits 删除最后一个元素("Mango")

pop() 方法返回“被弹出”的值:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x = fruits.pop();      // x 的值是 "Mango"

Pushing

push() 方法(在数组结尾处)向数组添加一个新的元素:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Kiwi");       //  向 fruits 添加一个新元素

push() 方法返回新数组的长度:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
var x =  fruits.push("Kiwi");   //  x 的值是 5

位移元素

位移与弹出等同,但处理首个元素而不是最后一个。

shift() 方法会删除首个数组元素,并把所有其他元素“位移”到更低的索引。

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.shift();            // 从 fruits 删除第一个元素 "Banana"

shift() 方法返回被“位移出”的字符串:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.shift();             // 返回 "Banana"

unshift() 方法(在开头)向数组添加新元素,并“反向位移”旧元素:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon");    // 向 fruits 添加新元素 "Lemon"

unshift() 方法返回新数组的长度。

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon");    // 返回 5

删除元素

既然 JavaScript 数组属于对象,其中的元素就可以使用 JavaScript delete 运算符来删除

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
delete fruits[0];           // 把 fruits 中的首个元素改为 undefined

使用 delete 会在数组留下未定义的空洞。请使用 pop()shift() 取而代之。

拼接数组

splice() 方法可用于向数组添加新项:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 0, "Lemon", "Kiwi");

第一个参数(2)定义了应添加新元素的位置(拼接)。

第二个参数(0)定义应删除多少元素。

其余参数(“Lemon”,“Kiwi”)定义要添加的新元素。

splice() 方法返回一个包含已删除项的数组:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 2, "Lemon", "Kiwi");

使用 splice() 来删除元素

通过聪明的参数设定,您能够使用 splice() 在数组中不留“空洞”的情况下移除元素:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(0, 1);        // 删除 fruits 中的第一个元素

第一个参数(0)定义新元素应该被添加(接入)的位置。

第二个参数(1)定义应该删除多个元素。

其余参数被省略。没有新元素将被添加。

合并(连接)数组

concat() 方法通过合并(连接)现有数组来创建一个新数组:

实例(合并两个数组)

var myGirls = ["Cecilie", "Lone"];
var myBoys = ["Emil", "Tobias", "Linus"];
var myChildren = myGirls.concat(myBoys);   // 连接 myGirls 和 myBoys

concat() 方法不会更改现有数组。它总是返回一个新数组。

concat() 方法可以使用任意数量的数组参数:

实例(合并三个数组)

var arr1 = ["Cecilie", "Lone"];
var arr2 = ["Emil", "Tobias", "Linus"];
var arr3 = ["Robin", "Morgan"];
var myChildren = arr1.concat(arr2, arr3);   // 将arr1、arr2 与 arr3 连接在一起

concat() 方法也可以将值作为参数:

实例(将数组与值合并)

var arr1 = ["Cecilie", "Lone"];
var myChildren = arr1.concat(["Emil", "Tobias", "Linus"]); 

裁剪数组

slice() 方法用数组的某个片段切出新数组。

本例从数组元素 1 (“Orange”)开始切出一段数组:

实例

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1); 

slice() 方法创建新数组。它不会从源数组中删除任何元素。

本例从数组元素 3 (“Apple”)开始切出一段数组:

实例

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(3); 

slice() 可接受两个参数,比如 (1, 3)。

该方法会从开始参数选取元素,直到结束参数(不包括)为止。

实例

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1, 3); 

如果结束参数被省略,比如第一个例子,则 slice() 会切出数组的剩余部分。

实例

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(2); 

自动 toString()

如果需要原始值,则 JavaScript 会自动把数组转换为字符串。下面两个例子将产生相同的结果:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits.toString(); 

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = fruits; 

所有 JavaScript 对象都拥有 toString() 方法。

如何识别数组

常见的问题是:我如何知晓某个变量是否是数组?

问题在于 JavaScript 运算符 typeof 返回 “object”:

var fruits = ["Banana", "Orange", "Apple", "Mango"];

typeof fruits;             // 返回 object

typeof 运算符返回 “object”,因为 JavaScript 数组属于对象。

解决方案 1:

为了解决这个问题,ECMAScript 5 定义了新方法 Array.isArray()

Array.isArray(fruits);     // 返回 true

此方案的问题在于 ECMAScript 5 不支持老的浏览器

解决方案 2:

创建您自己的 isArray() 函数以解决此问题:

function isArray(x) {
    return x.constructor.toString().indexOf("Array") > -1;
}

假如参数为数组,则上面的函数始终返回 true。

或者更准确的解释是:假如对象原型包含单词 “Array” 则返回 true。

解决方案 3:

假如对象由给定的构造器创建,则 instanceof 运算符返回 true:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
 
fruits instanceof Array     // 返回 true

JavaScript 数组排序

数组排序

数组排序

sort() 方法以字母顺序对数组进行排序:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // 对 fruits 中的元素进行排序

反转数组

reverse() 方法反转数组中的元素。

您可以使用它以降序对数组进行排序:

实例

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // 对 fruits 中的元素进行排序
fruits.reverse();         // 反转元素顺序

数字排序

默认地,sort() 函数按照字符串顺序对值进行排序。

该函数很适合字符串(“Apple” 会排在 “Banana” 之前)。

不过,如果数字按照字符串来排序,则 “25” 大于 “100”,因为 “2” 大于 “1”。

正因如此,sort() 方法在对数值排序时会产生不正确的结果。

我们通过一个比值函数来修正此问题:

实例

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b}); 

使用相同的技巧对数组进行降序排序:

实例

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a}); 

比值函数

比较函数的目的是定义另一种排序顺序。

比较函数应该返回一个负,零或正值,这取决于参数:

function(a, b){return a-b}

sort() 函数比较两个值时,会将值发送到比较函数,并根据所返回的值(负、零或正值)对这些值进行排序。

对数组使用 Math.max()

您可以使用 Math.max.apply 来查找数组中的最高值:

实例

function myArrayMax(arr) {
    return Math.max.apply(null, arr);
}

Math.max.apply([1, 2, 3]) 等于 Math.max(1, 2, 3)

对数组使用 Math.min()

您可以使用 Math.min.apply 来查找数组中的最低值:

实例

function myArrayMin(arr) {
    return Math.min.apply(null, arr);
}

Math.min.apply([1, 2, 3]) 等于 Math.min(1, 2, 3)

对数组内数据进行求和的常见方法

在JavaScript中,对数组内的元素进行求和有多种方法。这里介绍几种常见的做法:

使用reduce()方法

reduce()方法可以对数组中的每个元素执行一个reducer函数(升序执行),将其结果汇总为单个返回值。

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 输出: 15
  • accumulator 是累计器累计回调的返回值。
  • currentValue 是当前正在处理的数组元素。
  • 第二个参数0是累加器的初始值。

使用forEach()方法

通过循环遍历数组并累加到一个变量上。

const numbers = [1, 2, 3, 4, 5];
let sum = 0;
numbers.forEach(function(value) {
    sum += value;
});
console.log(sum); // 输出: 15

使用for循环

传统方式遍历数组并对元素求和。

const numbers = [1, 2, 3, 4, 5];
let sum = 0;
for (let i = 0; i < numbers.length; i++) {
    sum += numbers[i];
}
console.log(sum); // 输出: 15

或者使用更简洁的for...of循环:

const numbers = [1, 2, 3, 4, 5];
let sum = 0;
for (let num of numbers) {
    sum += num;
}
console.log(sum); // 输出: 15

使用扩展运算符与eval()

虽然不推荐因为存在安全风险,但也可以通过字符串拼接和eval()函数来实现:

const numbers = [1, 2, 3, 4, 5];
const sum = eval(numbers.join('+'));
console.log(sum); // 输出: 15

注意:使用eval()时要小心,因为它会执行传递给它的字符串代码,这可能带来安全风险,特别是当处理用户输入时。

相关文章:

  • 累计完工数量达到了xxxx超过了最大可完工数量xxxx
  • C++ 邻接矩阵(代码)
  • 【微知】plantuml在泳道图中如何将几个步骤放入一个框中?(group “sub框1“; end !! “sub框1“)
  • 5-24 色彩与风格——T2IA自适应
  • 【医院绩效管理专题】8.医院绩效数据的收集与整理方法:洞察现状,引领未来
  • 使用DeepSeek进行知识降维输出
  • 手动实现一个RTTI系统
  • 【AIGC】OpenAI 集成 Langchain 操作实战使用详解
  • 2025探索短剧行业新可能报告40+份汇总解读|附PDF下载
  • OpenManus代码详解(一):app/agent
  • seay代码审计工具的使用
  • ROS2——节点
  • Linux应用:PCB、fork
  • Linux C++ 编程死锁详解
  • JAVA-Thread类实现多线程
  • 想怎么测就怎么测?CAD“弧线智能打断”,让测量不再受限!
  • 【机器学习】迁移学习(Transfer Learning)
  • 多模态自适应融合技术:轻量级AutoFusion与GAN-Fusion详解
  • 如何设计微服务及其设计原则?
  • Redis--zset类型
  • 营商环境建设网站/ui设计
  • 开发软件需要学什么专业/石家庄seo结算
  • 郑州 网站制作/软文营销的五大注意事项
  • 厦门百城建设有限公司网站/windows优化大师是病毒吗
  • 建设银行住房公积金预约网站/推推蛙seo顾问
  • 自助云商城/seo技术培训山东