gpt4 book ai didi

javascript - 在 JavaScript 中拼接函数的替代方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:08:35 24 4
gpt4 key购买 nike

您好,我正在研究 LIME 编程,它是 javascript 的一个子集。

我需要使用 javascript.splice 从我的数组中删除某些元素,遗憾的是,LIME 不支持拼接功能。

知道如何创建自己的函数来从数组中删除元素吗?

感谢您的宝贵时间。

编辑:设法创建一个简单的函数。

function removeElements(array, index)
{
var tempArray = new Array();
var counter = 0;

for(var i = 0; i < array.length; i++)
{
if(i != index)
{
tempArray[counter] = array[i];
counter++;
}
}
return tempArray;
}

最佳答案

Array.prototype.splice 在 ECMA-262 §15.4.4.12 中有完整定义,因此请将其用作您的规范并编写一个。例如

15.4.4.12 Array.prototype.splice (start, deleteCount [ , item1 [ ,item2 [ , … ] ] ] )

When the splicemethod is called with two or morearguments start, deleteCount and(optionally) item1, item2, etc., thedeleteCount elements of the arraystarting at array index start arereplaced by the arguments item1,item2, etc. An Array object containingthe deleted elements (if any) isreturned. The following steps aretaken:...

您可能必须创建一个新数组,从旧数组复制成员到 start,插入新成员,然后从 start + deleteCount 到新数组的末尾。

编辑

这里是修改后的拼接,我发的第一个是不正确的。这一个拼接传入的数组并返回删除的成员。它看起来有点长,但我试图使其接近规范并且不假设支持任何复杂的数组方法甚至 Math.max/min。如果是的话,它可以简化很多。

如果不支持push,也可以很简单的替换。

function arraySplice(array, start, deleteCount) {
var result = [];
var removed = [];
var argsLen = arguments.length;
var arrLen = array.length;
var i, k;

// Follow spec more or less
start = parseInt(start, 10);
deleteCount = parseInt(deleteCount, 10);

// Deal with negative start per spec
// Don't assume support for Math.min/max
if (start < 0) {
start = arrLen + start;
start = (start > 0)? start : 0;
} else {
start = (start < arrLen)? start : arrLen;
}

// Deal with deleteCount per spec
if (deleteCount < 0) deleteCount = 0;

if (deleteCount > (arrLen - start)) {
deleteCount = arrLen - start;
}

// Copy members up to start
for (i = 0; i < start; i++) {
result[i] = array[i];
}

// Add new elements supplied as args
for (i = 3; i < argsLen; i++) {
result.push(arguments[i]);
}

// Copy removed items to removed array
for (i = start; i < start + deleteCount; i++) {
removed.push(array[i]);
}

// Add those after start + deleteCount
for (i = start + (deleteCount || 0); i < arrLen; i++) {
result.push(array[i]);
}

// Update original array
array.length = 0;
i = result.length;
while (i--) {
array[i] = result[i];
}

// Return array of removed elements
return removed;
}

关于javascript - 在 JavaScript 中拼接函数的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6515385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com