`

扩展数组的remove方法

阅读更多
var array = ["one", "two","three","four"];  
//数组中现在的内容为:  
//one,two,three,four  
//array.length == 4  
delete array[2];

数组结果:
one, two, undefined, four
//array.length == 4

可以看到,delete只是将数组array的第三个位置上的元素删掉了,可是数组的长度没有改变,显然这个不是我们想要的结果,不过我们可以借助数组对象自身的slice

方法来做到。一个比较好的实现,是来自于jQuery的设计者John Resig:

//Array Remove - By John Resig (MIT Licensed)  
Array.prototype.remove = function(from, to) {  
    var rest = this.slice((to || from) + 1 || this.length);  
    this.length = from < 0 ? this.length + from : from;  
    return this.push.apply(this, rest);  
};

这个函数扩展了JavaScript的内置对象Array,这样,我们以后的所有声明的数组都会自动的拥有remove能力,我们来看看这个方法的用法:
var array = ["one", "two", "three", "four", "five", "six"];  
print(array);  
array.remove(0);//删除第一个元素  
print(array);  
array.remove(-1);//删除倒数第一个元素  
print(array);  
array.remove(0,2);//删除数组中下标为0-2的元素(3个)  
print(array);
得到结果:
one,two,three,four,five,six
two,three,four,five,six
two,three,four,five
five

也就是说,remove接受两个参数,第一个参数为起始下标,第二个参数为结束下标,其中第二个参数可以忽略,这种情况下会删除指定下标的元素。当然,不是每个人

都希望影响整个原型链(原因在下一个小节里讨论),因此可以考虑另一种方式:
//Array Remove - By John Resig (MIT Licensed)  
Array.remove = function(array, from, to) {  
    var rest = array.slice((to || from) + 1 || array.length);  
    array.length = from < 0 ? array.length + from : from;  
    return array.push.apply(array, rest);  
};

其操作方式与前者并无二致,但是不影响全局对象,代价是你需要显式的传递需要操作的数组作为第一个参数:
var array = ["one", "two", "three", "four", "five", "six"];  
Array.remove(array, 0, 2);//删除0, 1, 2三个元素  
print(array); 
这种方式,相当于给JavaScript内置的Array添加了一个静态方法。

分享到:
评论

相关推荐

    从C#中的数组中删除指定元素的几种方法,超简单

    对于扩展问题——如果数组中有重复元素,而只需要删除一个,可以修改第五种方法,找到目标元素的第一个出现位置,然后使用RemoveAt方法删除。例如: ```csharp List&lt;int&gt; nums = new List&lt;int&gt; { 1, 3, 4, 5, 4, 2 ...

    Javascript remove 自定义数组删除方法

    为了实现类似的功能,我们可以自定义一个`remove()`方法扩展到数组的原型上。本文将详细介绍如何自定义一个`remove()`方法,并通过示例展示其在实际中的应用。 首先,我们来看一下如何自定义这个`remove(dx)`方法。...

    js从数组中删除指定值(不是指定位置)的元素实现代码

    然后,我们创建一个示例数组,并调用`remove`方法来删除数组中的一个特定值(例如3)。最后,我们打印出修改后的数组来验证操作的结果。 示例代码如下: ```javascript Array.prototype.indexOf = function(val) ...

    删除数组重复元素(VB.NET)

    - 在给定的源码中,可能会包含一个名为`RemoveDuplicates`的函数,它接受一个数组作为参数,返回一个没有重复元素的新数组。 - 函数内部可能使用了`For Each`循环遍历数组,用`If Not Array.Contains`或`HashSet....

    swift-iOS数组使用

    除了`append()`方法外,还可以使用`insert(_:at:)`在指定位置插入元素,或者通过扩展数组语法`+`合并两个数组。 ```swift var array = [1, 2] array.append(3) // [1, 2, 3] array.insert(0, at: 0) // [0, 1, ...

    动态二维数组 c#编程

    本文将深入探讨动态二维数组的概念、创建方法、操作技巧以及其在实际编程中的应用。 动态二维数组,顾名思义,与传统的固定大小的二维数组不同,它允许在程序运行时根据需要改变数组的行数和列数。这在处理不确定...

    自行使用Java数组实现链表数据结构

    在这个实现中,`add()` 方法在数组末尾添加新的节点,`insert()` 方法则通过移动数组元素来插入新节点,`remove()` 方法则删除指定位置的节点并将后续节点前移。注意,由于我们使用数组,当链表容量不足时,需要手动...

    C++集合类的编写,用数组实现的

    在数组实现中,我们需要确保元素不超出数组边界,并考虑是否需要动态扩展数组。 3. **删除元素**:`remove`或`erase`方法用于从集合中移除一个元素。数组实现下,如果删除中间位置的元素,可能需要将后续元素前移以...

    实例185 - 自定义泛型化数组类

    // 检查数组是否已满,如果需要可以扩展数组 array[index++] = element; } public T get(int index) { return array[index]; } // 其他方法,如remove、contains等 } ``` 在这个例子中,`GenericArray`类...

    用Java动态数组扩充实现线性表

    在提供的代码文件中,`VariableLengthArrayList.java`可能是实现动态数组的类,它可能包含上述的初始化、扩容、插入和删除等方法。`ListInterface.java`可能定义了一个接口,描述了线性表应具备的基本操作,如`add()...

    C语言数组形链表实现

    一种常见的方法是每次数组满时将其容量翻倍,这样可以降低频繁扩展带来的开销。同时,删除元素时,我们可能需要调整数组中其他元素的位置,以保持连续性。 在实际应用中,数组形链表适用于那些元素数量不确定且可能...

    java动态数组的应用

    2. **用户输入的文本分析**:例如,解析用户输入的一段文字中的单词,需要一个能够随着单词数量增加而扩展的数组。 3. **日志记录**:日志系统通常需要收集不同时间点的信息,使用动态数组可以轻松地添加新的日志...

    动态数组的C语言实现

    在C语言中实现动态数组,我们需要一个结构体来存储数组的大小和指针,以及一系列操作数组的方法,如初始化、添加元素、删除元素和释放内存。这三个文件可能分别对应于这些功能: 1. **array.h**:头文件,声明动态...

    动态数组的基本应用与实现实验报告.pdf

    - `insert()`函数:在指定索引处插入元素,如果空间不足,会自动扩展数组容量。 - `remove()`函数:删除指定索引处的元素。 - `append()`函数:在数组末尾添加元素。 - `size()`函数:返回数组当前包含的元素数量。 ...

    不改变长度删除数组中的元素

    数组的长度是其可容纳元素的最大数量,当我们说"不改变长度删除元素"时,意味着不会使用`remove()`或`delete`等直接移除元素的方法,因为这些方法会改变数组的长度,可能导致后续元素的索引错乱。取而代之的是,我们...

    C#使用List类实现动态变长数组的方法

    `Insert` 方法可以在指定位置插入一个元素,`RemoveAt` 方法移除指定索引处的元素: ```csharp people.Insert(0, new Person() { Name = "Alice", Address = "1st cross,bangalore" }); people.RemoveAt(0); // ...

    C++中CArray动态数组的使用.doc

    `SetAtGrow` 检查索引是否超出当前数组大小,如果超出,则使用 `SetSize` 扩展数组;然后将新元素赋值给指定索引。 6. **效率考虑**: 在 CArray 中,使用引用(&)作为模板参数(ARG_TYPE)通常是推荐的做法,...

    CArray详解例子说明

    CArray 的主要特点是可以动态压缩和扩展数组,数组索引从 0 开始,可以决定是固定数组上界还是允许当添加元素时扩展当前的边界。内存对上界是连续地分配空间,甚至一些元素可为空。和 CArray 一样,CArray 索引元素...

    数组类的分功能实现

    4. **扩展性**:可以添加更多的方法,如排序、查找、合并等。 通过这个项目,开发者可以深入理解C++类的设计与实现,以及如何利用面向对象编程的原则来改进基本的数据结构。同时,这也是对C++内存管理和异常处理的...

    用数组实现的优先队列(JAVA)

    - 删除方法:如`remove()`,删除并返回队首元素,然后调整堆。 - 查看队首元素的方法:如`peek()`,不删除地查看队首元素。 - 其他辅助方法:如`swap(int i, int j)`用于交换数组中的元素,`upHeap()`和`downHeap...

Global site tag (gtag.js) - Google Analytics