使用splice在JavaScript中删除数组对象中某个位置之后的所有元素

3
我想知道是否有一种简单的方法,在关键位置后剪切所有元素。
array.splice(index,howmany,item1,.....,itemX)

文档指出,第二个元素是指定要删除的元素数量的必填字段,是否有什么要注意的地方?

附注 - 不要寻求通常的暴力解决方案。


1
很容易在控制台中尝试自己:var a = [1,2,3,4,5]; a.splice(2); console.log(a); - dfsq
1
你到底在这里问什么?Array.splice是一个非常简单的方法,它接受一个起始索引和一个可选的“多少”参数,你不理解的是什么,而你不想要的“蛮力”解决方案会是什么样子? - adeneo
1
这里的关键词是您想要在特定位置之后“截断”数组。T.J.展示了如何仅设置.length来实现此目的。另外,您拥有的是JavaScript数组。JSON是一种文本格式。 - jfriend00
1
我想知道你真正想问什么,因为很难理解。你有“JSON数组”,但实际上并没有这样的东西,你想使用splice,但同时又不想使用splice,而且你不想要一个“蛮力解决方案”,无论那是什么,T.J.的解决方案肯定是最“蛮力”的,但它很可能正是你要找的? - adeneo
@adeneo: "你有“JSON数组”,但这种东西不存在" 当然存在:"[1, 2, 3, 4]" 这就是一个JSON数组。;-D (我知道你知道,只是想逗你开心一下。) - T.J. Crowder
显示剩余7条评论
2个回答

9
我想知道是否有一种简单的方法来剪切JSON数组中关键位置后面的所有元素。
如果是所有关键位置后的元素,您可以这样做:
array.length = theKeyPosition;

E.g.:

var array = [
    "one",
    "two",
    "three",
    "four",
    "five",
    "six"
];
var theKeyPosition = 3;
array.length = theKeyPosition; // Remove all elements starting with "four"

如果您还不知道关键位置,在ES5环境中(这可以模拟),您可以使用filter

var array = [
    "one",
    "two",
    "three",
    "four",
    "five",
    "six"
];
var keep = true;
array = array.filter(function(entry) {
    if (entry === "four") {
        keep = false;
    }
    return keep;
});

这段代码使用了字符串,但是你可以很容易地将if (entry === "four") {改为if (entry.someProperty === someValue) {,用于处理对象数组。


1
谢谢,没想到会这么简单! - Rohan
@Rohan:不用担心。:-) 如果这个回答解决了你的问题,请记得接受这个答案(但只有当它确实解决了你的问题时)。 - T.J. Crowder

0
第二个参数实际上对于 `Array.prototype.splice()` 来说是可选的,只使用第一个参数就可以实现所需的行为。
例如(从被接受的答案中复制):

const array = [
    "one",
    "two",
    "three",
    "four",
    "five",
    "six"
];
const theKeyPosition = 3;
array.splice(theKeyPosition+1); // Remove all elements starting with "four"
console.log(array);

然而,我仍然更喜欢设置长度属性,因为它应该更快(我找不到JSPerf结果,请在这里帮助我)。

MDN我的其他答案中了解更多相关信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接