首页 > 试题广场 >

删除arr数组中的第i个元素的最好做法是?

[单选题]
删除arr数组中的第i个元素的最好做法是?

arr.splice(i-1,1)

arr.slice(0,n).concat(arr.slice(n+1,arr.length));
Array.prototype.remove = function(dx)  {  
	if (isNaN(dx) || dx > this.length) {
		return false;
	}  
	for (var i = 0,
	n = 0; i < this.length; i++)   {    
		if (this[i] != this[dx])    {      this[n++] = this[i]    
		}  
	}  this.length -= 1 
}
for (var i = 0,
n = 0; i < this.length; i++)   {    
	if (this[i] != this[dx])     {     this[n++] = this[i]    
	}  
}



你先确认那是不是 JavaScript? flash 编程也应该支持 javascript 吧。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var last = fruits.splice(2,0,"Lemon","Kiwi");
结果 last = Banana,Orange,Lemon,Kiwi,Apple,Mango.
它把从 2 开始的 0 个数据替换成 "Lemon", "Kiwi"。如果你的是 splice(0,1) 那就是把从0开始的1个数据去掉,但没有替换任何东西,只是直接删除。
发表于 2015-04-06 17:53:33 回复(1)
把i看成1了;

发表于 2019-01-16 20:09:39 回复(0)
splice()方法向/从数组中添加/删除项目,然后返回被删除的项目 注释:该方***改变原始数组
发表于 2018-12-28 13:35:16 回复(0)
不是从 0 开始计算吗,第0个元素,第1个元素?
发表于 2015-09-28 21:26:58 回复(3)

定义和用法

splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。

注释:该方***改变原始数组。

语法

arrayObject.splice(index,howmany,item1,.....,itemX)
参数 描述
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX 可选。向数组添加的新项目。
发表于 2016-03-06 16:08:36 回复(8)

我觉得C选项的错误是因为,数组中可能会有重复的元素,满足这个this[i]!=this[dx]条件的元素不一定只有一个,不一定就是指定的第i个元素。所以CD选项错误;B选项是因为concat()方法只是返回数组的副本,没有在原数组上修改。

编辑于 2017-10-08 21:23:44 回复(2)


发表于 2015-10-21 19:07:31 回复(4)
A答案难道不是删除第i+1个元素么
发表于 2015-07-16 12:22:59 回复(8)
slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。  slice() 方法不会改变原始数组。
array .slice( start end )
start: 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。
注意 :fruits.slice(1,3)  是从第一个算起包含第一个元素,到第三个元素但不包含第三个元素,也就是说是截取下标为1和2两个元素。
发表于 2016-09-01 15:09:13 回复(1)
先从B开始,B方法用了slice跟concat 这两个方法都不会改变原来的数组。
C,D的通病就是,在JS中数组的长度是可以动态改变的,意思是 i<this.length; 这个length值是会变化的。

发表于 2016-10-19 20:28:32 回复(2)
复习改动原数组的数组方法:
splice() 元素删除或插入
push() unshift()首尾追加元素
pop() shift() 首尾删除元素
reverse() 翻转数组
sort() 数组排序


发表于 2021-09-09 09:44:31 回复(0)
b不改变原数组
cd中的数组中可能会有重复的元素,满足这个this[i]!=this[dx]条件的元素不一定只有一个,不一定就是指定的第i个元素。
发表于 2019-01-09 16:46:03 回复(0)
发表于 2019-03-10 14:03:48 回复(0)
删除splice(index,howmany)
插入splice(index,0,item1,...,itemX)
替换splice(index,howmany,item1,...,itemX)
发表于 2016-05-04 10:36:12 回复(0)
arr.splice(index,howmany,item1、itemX...);
index需要删除或添加的项目的位置
howmany 需要删除的项目
item。。。。 添加的项目
发表于 2015-04-27 15:34:58 回复(0)
说实话我就看懂第一个选项,没有问题就选了,其他三个没看懂,有没有大佬讲解一下其他三个
发表于 2022-10-03 15:23:59 回复(0)
这道理不是很对吧,个人认为你不能在原数组上做修改,保持数据不可变特性才对
发表于 2022-03-01 09:32:33 回复(0)
interface Array<T> {
    /**
    * 
    * @param start 数组中从零开始的位置,从该位置开始删除元素
    * @param deleteCount 要删除的元素数
    */
    splice(start: number, deleteCount?: number): T[];
}
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(arr.splice(4, 3)); //[5]
console.log(arr); //[1, 2, 3, 4, 6, 7, 8, 9]
编辑于 2019-04-29 20:56:57 回复(3)
谁能解释一下1为什么最好,其他三个有什么劣势,能详细清楚一点吗
发表于 2022-10-26 09:25:10 回复(0)
Array.prototype.remove = function(dx)  {
    if (isNaN(dx) || dx > this.length) {
        console.log(this.length);
        return false; }
    for (var i = 0,
    n = 0; i < this.length; i++)   {
        if (this[i] != this[dx])    {      this[n++] = this[i]
        }
    }  this.length -= 1

    }
    var arr=[1,5,6,8,7];
    //console.log(Array.prototype);
    //console.log(arr.__proto__);
    console.log(arr.__proto__.remove(3));
第三个选项结果长度为0,返回false,,怎么回事
发表于 2022-09-30 11:44:00 回复(0)