今天在看到 JavaScript 中 Array 这一部分的时候,发现字符串也可以作为数组的下标,以前还真不知道,孤陋寡闻。。。。
既然提供了这个特性,那么就有它的存在价值,我们来看看有什么用,欢迎大家补充。
首先,Array 是从 Object 继承下来,所以 Array 具有 Object 有的任何能力。看看Object作为集合的情况:
新建: var object = new Object(); 或 var object = {};
增加: object[strIndex ] = value; (strIndex 为string)
删除: delete object[strIndex ];
遍历: for ( var strObjIndex in object ) object[strObjIndex ];
增加: object[strIndex ] = value; (strIndex 为string)
删除: delete object[strIndex ];
遍历: for ( var strObjIndex in object ) object[strObjIndex ];
code 1:
var object = {}; // var object = new Object(); 二者等价
object[ " First " ] = " Firstmm " ;
object[ " Second " ] = " Secondmm " ;
object[ " Third " ] = " Thirdmm " ;
delete object[ " Second " ];
for ( var strObjIndex in object )
alert( " strObjIndex = " + strObjIndex + "\nobject[" +strObjIndex + "] = "+ object[strObjIndex]);
object[ " First " ] = " Firstmm " ;
object[ " Second " ] = " Secondmm " ;
object[ " Third " ] = " Thirdmm " ;
delete object[ " Second " ];
for ( var strObjIndex in object )
alert( " strObjIndex = " + strObjIndex + "\nobject[" +strObjIndex + "] = "+ object[strObjIndex]);
除了我们熟悉的方法外,Array也是可以用字符串做下标,像code 1 中的 Object 一样。
code 2:
var array = new Array(); // var array = []; 二者等价
array[ " First " ] = " Firstgg " ;
array[ " Second " ] = " Secondgg " ;
array[ " Third " ] = " Thirdgg " ;
delete array[ " First " ];
for ( var strArrayIndex in array )
alert( " strArrayIndex = " + strArrayIndex + "\narray[" +strArrayIndex + "] = " + array[strArrayIndex]);
array[ " First " ] = " Firstgg " ;
array[ " Second " ] = " Secondgg " ;
array[ " Third " ] = " Thirdgg " ;
delete array[ " First " ];
for ( var strArrayIndex in array )
alert( " strArrayIndex = " + strArrayIndex + "\narray[" +strArrayIndex + "] = " + array[strArrayIndex]);
在某些情况下,用字符串做下标可以提高我们的访问效率,
例如我们要在Array中检索出一个指定的值,通常做法,我们需要遍历整个数组,如下:
code 3:
var arrayTest = new Array(); // var arrayTest = []; 二者等价
// 初始化arrayTest
arrayTest.push( " Blog " ); // arrayTest[0] = "Blog"; 二者等价
arrayTest.push( " Java " );
arrayTest.push( " MaJianan " );
var output = "" ; // 用于输出
// 我们需要检索出值为 Majianan 的元素,通常做法如下:
for ( var i = 0 ; i < arrayTest.length;i ++ ){
if (arrayTest[i] == " MaJianan " ){
output = " 用整数做下标的Array:哈哈! ^+^ \n " ;
output = output + " 第 " + i + " 次才找到\n " ;
output = output + " arrayTest[ " + i + " ] = " + arrayTest[i];
alert(output);
} else {
output = " 用整数做下标的Array:555555555 \n " ;
output = output + " 第 " + i + " 次没有找到\n " ;
output = output + " 找到的是arrayTest[ " + i + " ] = " + arrayTest[i]
alert(output);
}
}
// 初始化arrayTest
arrayTest.push( " Blog " ); // arrayTest[0] = "Blog"; 二者等价
arrayTest.push( " Java " );
arrayTest.push( " MaJianan " );
var output = "" ; // 用于输出
// 我们需要检索出值为 Majianan 的元素,通常做法如下:
for ( var i = 0 ; i < arrayTest.length;i ++ ){
if (arrayTest[i] == " MaJianan " ){
output = " 用整数做下标的Array:哈哈! ^+^ \n " ;
output = output + " 第 " + i + " 次才找到\n " ;
output = output + " arrayTest[ " + i + " ] = " + arrayTest[i];
alert(output);
} else {
output = " 用整数做下标的Array:555555555 \n " ;
output = output + " 第 " + i + " 次没有找到\n " ;
output = output + " 找到的是arrayTest[ " + i + " ] = " + arrayTest[i]
alert(output);
}
}
code 4:
// 使用字符串做数组下标
var arrayTest1 = [];
arrayTest1[ " blog " ] = " Blog " ;
arrayTest1[ " java " ] = " Java " ;
arrayTest1[ " majianan " ] = " MaJianan " ;
var key = " majianan " ;
if ( typeof (arrayTest1[key]) == " undefined " ){
output = " 用字符串做下标的Array:555555555 \n " ;
output = output + " 没找到下标为 " + key + " 的东东。\n " ;
output = output + " 明明没有这个东西,还让我找,耍我呢吧!!! " ;
alert(output);
// do sth
} else {
output = " 用字符串做下标的Array:哈哈! ^+^ 一次搞定\n " ;
output = output + " 找到arrayTest1[ " + key + " ] = " + arrayTest1[key];
alert(output);
// do sth
}
var key1 = " hello " ;
if ( typeof (array[key1]) == " undefined " ){
output = " 用字符串做下标的Array:555555555 \n " ;
output = output + " 没找到下标为 " + key1 + " 的东东。\n " ;
output = output + " 明明没有这个东西,还让我找,耍我呢吧!!! " ;
alert(output);
// do sth
} else {
output = " 用字符串做下标的Array:哈哈! ^+^ 一次搞定\n " ;
output = output + " 找到arrayTest1[ " + key1 + " ] = " + arrayTest1[key1];
alert(output);
// do sth
}
var arrayTest1 = [];
arrayTest1[ " blog " ] = " Blog " ;
arrayTest1[ " java " ] = " Java " ;
arrayTest1[ " majianan " ] = " MaJianan " ;
var key = " majianan " ;
if ( typeof (arrayTest1[key]) == " undefined " ){
output = " 用字符串做下标的Array:555555555 \n " ;
output = output + " 没找到下标为 " + key + " 的东东。\n " ;
output = output + " 明明没有这个东西,还让我找,耍我呢吧!!! " ;
alert(output);
// do sth
} else {
output = " 用字符串做下标的Array:哈哈! ^+^ 一次搞定\n " ;
output = output + " 找到arrayTest1[ " + key + " ] = " + arrayTest1[key];
alert(output);
// do sth
}
var key1 = " hello " ;
if ( typeof (array[key1]) == " undefined " ){
output = " 用字符串做下标的Array:555555555 \n " ;
output = output + " 没找到下标为 " + key1 + " 的东东。\n " ;
output = output + " 明明没有这个东西,还让我找,耍我呢吧!!! " ;
alert(output);
// do sth
} else {
output = " 用字符串做下标的Array:哈哈! ^+^ 一次搞定\n " ;
output = output + " 找到arrayTest1[ " + key1 + " ] = " + arrayTest1[key1];
alert(output);
// do sth
}
Array的这个特性(用字符串做下标)可以用来高效的检索Unique的字符串集合。
遍历用整数做下标的Array的时间复杂度是O(n),而遍历用字符串做下标的Array的时间复杂度是O(1)。
转:http://www.blogjava.net/majianan/archive/2006/11/09/80184.aspx
相关推荐
这与在对象上操作的方式类似,只是在对象中,字符串下标通常用于表示属性,而在数组中,它们通常用来表示索引,尽管这不是标准的用法。这样做并不会改变数组的长度,`length`属性仍然只反映数字下标的元素数量。 遍...
这种数组和字符串下标不统一的现象在VBScript中可能引发混淆,特别是对那些同时接触JavaScript的开发者。尽管如此,理解这些差异是成为跨平台开发者的关键技能,有助于避免潜在的错误和提高代码的可移植性。 总的来...
Java 数组和字符串 Java 数组是一种复合数据类型,由相同类型的数据按照顺序组成。数组名和下标可以用来访问数组中的数据。数组的优点是可以大大简化类似的问题,例如表示一个班 50 个人的数学成绩。数组可以是一维...
然而,在JavaScript中,数组的索引也可以是非整数值,比如字符串,这使得JavaScript数组有点类似于对象,可以在属性名不是整数时作为对象使用。以下内容将详细解释如何使用JavaScript获取字符串型数组下标的数组长度...
在JavaScript中,数组和字符串是两种基本的数据类型,它们各自具有一系列的方法来执行各种操作。正确理解和掌握这些方法对于编写高效和优雅的代码至关重要。 首先,让我们来看看字符串(String)对象的方法。 1. ...
在 JavaScript 中,数组是一种特殊的数据结构,可以存储各种类型的数据,包括整型、字符串、对象等。虽然 JavaScript 不直接支持多维数组,但可以通过数组嵌套实现类似的功能。 1. **定义数组** - 定义固定长度的...
JavaScript数组提供了许多内置方法,如`push()`(向数组末尾添加元素)、`pop()`(移除并返回数组最后一个元素)、`shift()`(移除并返回数组第一个元素)、`unshift()`(向数组开头添加元素)、`slice()`(提取数组...
数组中的每个数据项被称为元素,元素可以是任何类型的数据,包括数字、字符串、甚至是其他数组或对象。 2. 数组声明 在JavaScript中,可以使用数组字面量或Array构造函数来声明数组。 - 使用数组字面量的方式...
JavaScript数组可以包含任意类型的元素,无论是字符串、数字、布尔值,甚至是对象或另一个数组。也就是说,数组中的元素类型不需要一致,这为存储复杂数据结构提供了可能。例如,`var misc = ['string', 11.3, false...
JavaScript数组操作函数是编程中非常基础且重要的部分,它们提供了对数组进行各种操作的方法,包括添加、删除、合并以及转换等。以下是对标题和描述中提及的数组操作函数的详细说明: 1. **push()**: `push()` 函数...
- **下标规则**:下标可为非负整数(包括整数字符串),会自动从0开始填充元素。负数、小数或非数字字符串作为下标时,将被视为自定义属性,不会计入数组长度。 - **遍历注意事项**:`for`循环不遍历属性,`...
JavaScript中的字符串截取是编程中常见的操作,主要涉及到三个方法:`slice()`、`substr()` 和 `substring()`。这三个方法都是用来从一个字符串中提取一部分新的字符串,但它们的使用方式和逻辑略有不同。 首先,...
push()方法的用法和普通的JavaScript数组的push()方法相同,都允许开发者向一个数组的末尾添加一个或多个元素,并且该方法会修改原数组,返回修改后数组的新长度。需要注意的是,jQuery的push()方法实际上是对...
在JavaScript中,字符串和数组是两种非常常见的数据类型。它们各有各的特点,但在某些场景下,我们需要将字符串转换为数组,进行操作后再转回字符串。本篇将详细讲解如何使用JavaScript实现这一过程,并删除指定下标...
本文将详细介绍 JavaScript 中的数组函数、数字函数、字符串函数、表单验证、HashMap、堆栈、日期函数、call 函数等。 数组函数 JavaScript 中的数组函数提供了多种方法来操作数组,包括: * `push()`: 将参数...
本篇文章将深入探讨如何在C++中读取并解析JSON字符串内容。 首先,你需要一个C++库来帮助解析JSON。虽然C++标准库并不直接支持JSON,但有许多第三方库可供选择,如 RapidJSON、nlohmann/json 和 Jsoncpp。这里我们...
在JavaScript中,数组和字符串是两种非常基础且重要的数据类型,它们各自有一系列的方法用于处理和操作。下面我们将深入探讨这两个部分。 ### 一、数组(array)的方法 1. **`push()`**: 向数组末尾添加一个或多个...