Java编写数组方法脚本:使用示例创建

⚡ 智能摘要

Java脚本数组方法允许开发者通过单个对象存储、检索和转换有序的值集合。本文将介绍数组的创建、索引访问、内置方法族、迭代技术、多维结构,并提供一个可运行的示例及其预期输出。

  • 📦 核心理念: 数组是一个对象,它在一个名称下保存多个值,并通过从零开始的索引公开每个值。
  • 🛠️ 创建语法: 建议使用方括号进行字面表示,但数组构造函数仍然可用于旧代码。
  • 变异方法: push、pop、shift、unshift 和 splice 会改变原始数组,并返回删除的值或新的长度。
  • 🔍 非变异方法: slice、concat、join、indexOf 和 includes 读取数组而不更改存储的元素。
  • 🔁 迭代系列: forEach、map、filter、reduce 和 find 对每个元素应用回调函数,并支持函数式编程模式。
  • ⚠️ 排序注意事项: 默认排序方式将值作为字符串进行比较,因此数值数据需要显式的比较函数。
  • 🧱 嵌套结构: 将数组嵌套在数组中,会生成一个多维网格,该网格可以通过两个索引表达式进行寻址。

Java脚本数组方法

什么是数组? Java脚本?

数组是一个可以存储 物品的集合当您需要存储大量相同类型的数据时,数组就非常有用。假设您想要存储 500 名员工的详细信息。如果您使用变量,则需要创建 500 个变量,而使用单个数组即可完成相同的操作。您可以通过引用数组元素来访问数组中的元素。 索引号数组第一个元素的索引为零。

与严格类型语言中的数组不同, Java脚本数组是动态的。当添加新元素时,数组的长度会自动增长,单个数组可以同时包含字符串、数字、布尔值、对象,甚至其他数组。这种灵活性使得数组成为浏览器脚本和服务器端代码中列表数据的默认容器。

如何在……中创建数组 Java脚本

您可以在中创建一个数组 JavaScript 如下所示。

var students = ["John", "Ann", "Kevin"];

在这里,您将在创建数组时使用值“John”、“Ann”和“Kevin”对其进行初始化。“John”、“Ann”和“Kevin”的索引分别为 0、1 和 2。如果您想向学生数组添加更多元素,可以这样做:

students[3] = "Emma";
students[4] = "Rose";

你也可以使用 Array 构造函数创建数组,如下所示:

var students = new Array("John", "Ann", "Kevin");

OR

var students = new Array();

students[0] = "John";

students[1] = "Ann";

students[2] = "Kevin";

如何访问和修改数组元素

每个元素都位于一个编号位置。方括号表示法用于读取值、赋新值,或在索引等于当前长度时追加新条目。

let students = ["John", "Ann", "Kevin"];

console.log(students[0]);              // John  - first element
console.log(students[students.length - 1]); // Kevin - last element

students[1] = "Anna";                // replace an existing value
students[3] = "Emma";                // append a new value

console.log(students);              // ["John", "Anna", "Kevin", "Emma"]
console.log(students.length);       // 4
console.log(students[9]);              // undefined - index does not exist

⚠️警告: 给一个远超出当前长度的索引赋值会创建一个稀疏数组,其中会充满空槽。 push() 而不是使用跳转索引,这样数组就能保持紧凑和可预测性。

Java脚本数组方法

Array 对象具有许多属性和方法,可帮助开发人员轻松高效地处理数组。您可以通过指定 arrayname.property 获取属性的值,并通过指定 arrayname.method() 获取方法的输出。

  1. 长度属性 –> 如果想知道数组中元素的数量,可以使用 length 属性。
  2. 原型属性 –> 如果您想添加新的属性和方法,您可以使用prototype属性。
  3. 逆向方法 –> 您可以使用反向方法反转数组中项目的顺序。
  4. 排序方法 您可以使用 sort 方法对数组中的元素进行排序。
  5. pop 方法 –> 您可以使用 pop 方法删除数组的最后一项。
  6. 转移法 您可以使用 shift 方法删除数组的第一个元素。
  7. 推送方法 –> 您可以添加一个值作为数组的最后一项。

下表对最常用的方法进行了分组,以便您可以一目了然地看到哪些方法会改变原始数组,哪些方法会返回新值。

付款方式 目的 Returns & Exchanges 更改原始数组
推() 在末尾添加一个或多个项目。 新长度
流行音乐() 移除最后一个项目 已移除项目
取消移位() 在前面添加一个或多个项目 新长度
转移() 移除第一个项目 已移除项目
拼接() 在任意位置插入或删除项目 已移除项目的数组
种类() 订购商品 已排序数组
撤销() 颠倒物品顺序 反向数组
片() 复制数组的一部分 新数组 没有
连接() 合并两个或多个数组 新数组 没有
加入() 将多个项目合并成一个字符串 没有
指数() 找到一个值的位置 索引或 -1 没有
包括() 测试某个值是否存在 对或错 没有

添加和删​​除元素

let fruits = ["apple", "banana"];

fruits.push("cherry");      // ["apple", "banana", "cherry"]
fruits.unshift("mango");    // ["mango", "apple", "banana", "cherry"]
fruits.pop();                // ["mango", "apple", "banana"]
fruits.shift();              // ["apple", "banana"]

// splice(startIndex, deleteCount, ...itemsToInsert)
fruits.splice(1, 0, "kiwi"); // ["apple", "kiwi", "banana"]
console.log(fruits);

搜索、复制和合并

let colors = ["red", "green", "blue", "green"];

console.log(colors.indexOf("green"));     // 1  - first match only
console.log(colors.lastIndexOf("green")); // 3
console.log(colors.includes("pink"));     // false
console.log(colors.slice(1, 3));         // ["green", "blue"]
console.log(colors.join(" | "));         // red | green | blue | green
console.log(colors.concat(["black"]));   // new array, colors unchanged

迭代方法:forEach、map、filter 和 reduce

现代 Java脚本倾向于使用回调驱动的方法而不是手动索引循环,因为操作的意图直接在方法名称中说明。

const scores = [45, 72, 88, 31, 95];

scores.forEach(s => console.log(s));   // prints each score

const doubled = scores.map(s => s * 2);  // [90, 144, 176, 62, 190]
const passed  = scores.filter(s => s >= 50); // [72, 88, 95]
const total   = scores.reduce((sum, s) => sum + s, 0); // 331
const first   = scores.find(s => s > 80);   // 88

console.log(doubled, passed, total, first);

💡提示: 默认值 sort() 将元素转换为字符串,因此 [10, 9, 100].sort() 回报 [10, 100, 9]传递一个比较器,例如: sort((a, b) => a - b) 正确排序数字。

Java脚本数组示例及源文件 Code

以下脚本创建了一个学生数组,通过原型属性添加了一个自定义显示方法,然后依次演示了长度、排序、反转、弹出和压入操作。请自行尝试:

<html>
<head>
	<title>Arrays!!!</title>
	<script type="text/javascript">
		var students = new Array("John", "Ann", "Aaron", "Edwin", "Elizabeth");
		Array.prototype.displayItems=function(){
			for (i=0;i<this.length;i++){
				document.write(this[i] + "<br />");
			}
		}
		document.write("students array<br />");
		students.displayItems();
		document.write("<br />The number of items in students array is " + students.length + "<br />");
		document.write("<br />The SORTED students array<br />");
		students.sort();
		students.displayItems();
		document.write("<br />The REVERSED students array<br />");
		students.reverse();
		students.displayItems();
		document.write("<br />THE students array after REMOVING the LAST item<br />");
		students.pop();
		students.displayItems();
        document.write("<br />THE students array after PUSH<br />");
        students.push("New Stuff");
		students.displayItems();
	</script>
</head>
<body>
</body>
</html>

预期产量:

students array
John
Ann
Aaron
Edwin
Elizabeth

The number of items in students array is 5

The SORTED students array
Aaron
Ann
Edwin
Elizabeth
John

The REVERSED students array
John
Elizabeth
Edwin
Ann
Aaron

THE students array after REMOVING the LAST item
John
Elizabeth
Edwin
Ann

THE students array after PUSH
John
Elizabeth
Edwin
Ann
New Stuff

注意,sort 操作会将“Aaron”放在“Ann”之前,因为排序是通过比较字母的字符编码来区分大小写的。还要注意,pop 操作会从反转后的数组中移除“Aaron”,这证实了 sort 和 reverse 操作都会对原始数组进行原地修改。

如何循环遍历 Java脚本数组

四个厕所ping 有多种循环风格可供选择,每种风格都适用于不同的场景。经典的 for 循环可以完全控制索引,for…of 循环直接读取值,forEach 循环清晰地表达意图,而 for…in 循环则应该保留用于对象属性。

const cities = ["Paris", "Tokyo", "Cairo"];

// 1. Classic for loop - index is available
for (let i = 0; i < cities.length; i++) {
    console.log(i + ": " + cities[i]);
}

// 2. for...of loop - value is available
for (const city of cities) {
    console.log(city);
}

// 3. forEach with index parameter
cities.forEach((city, index) => console.log(index, city));

// 4. entries() when both index and value are needed
for (const [index, city] of cities.entries()) {
    console.log(index, city);
}

关于循环语法(包括 while 和 do…while)的更深入探讨,请参阅文章。 如何在循环中使用 Java脚本.

多维数组 Java脚本

Java脚本没有专门的矩阵类型。网格本质上就是一个数组,其元素本身也是数组,需要使用两个索引表达式才能访问单个单元格。

const matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

console.log(matrix[1][2]); // 6  - row index 1, column index 2

for (const row of matrix) {
    console.log(row.join(" "));
}

// flatten a nested array into a single level
console.log(matrix.flat()); // [1, 2, 3, 4, 5, 6, 7, 8, 9]

输出:

6
1 2 3
4 5 6
7 8 9
[1, 2, 3, 4, 5, 6, 7, 8, 9]

从表单验证到数据渲染,几乎所有实际脚本中都会用到数组。继续…… 实际 Java脚本代码示例, 审查 Java脚本字符串 用于文本处理,并阅读相关内容 内部和外部 Java脚本 决定这些脚本在页面中的位置。希望对数组内容进行静态类型检查的开发者可以继续进行下一步。 TypeScript 教程.

常见问题

数组存储的是通过数字索引访问的有序列表,而对象存储的是命名属性,顺序不保证。数组继承了列表的一些方法,例如 push 和 map,而普通对象则不提供这些方法。

使用 `Array.isArray(value)`,它只对数组返回 `true`。`typeof` 运算符在这里不可靠,因为它对数组、日期和 `null` 都返回 `'object'`。

使用扩展语法 `[…original]` 或 `original.slice()`。普通赋值只会复制引用,因此对任一变量的编辑都会影响同一个底层数组。

使用 indexOf 查找位置并将其传递给 splice,例如 arr.splice(arr.indexOf(“Ann”), 1)。或者,filter 返回一个排除不需要的值的新数组。

数组用于存储浏览器中的聊天消息历史记录、嵌入向量和流式模型令牌。诸如 map 和 reduce 之类的方法会在将这些集合发送到 API 或进行渲染之前对其进行重塑。

是的,通常情况下确实如此。不过,还是要确认建议的方法是否会改变原始数组,因为意外的拼接或排序可能会破坏 React 或 Vue 组件中的状态。

总结一下这篇文章: