【问题标题】:Remove all elements after a position in an array of objects in Javascript using splice使用拼接删除Javascript中对象数组中某个位置之后的所有元素
【发布时间】:2014-07-21 09:58:45
【问题描述】:

我想知道是否有一种简单的方法可以在关键位置之后拼接出所有元素。

array.splice(index,howmany,item1,.....,itemX)

文档说指定要删除的元素数量的第二个元素是必填字段,是否需要注意才能完成此操作?

P.S - 不寻找正常的蛮力解决方案。

【问题讨论】:

  • 在控制台中尝试自己很容易:var a = [1,2,3,4,5]; a.splice(2); console.log(a);.
  • 你到底在问什么? Array.splice 是一种非常简单的方法,它采用起始索引和可选的“多少”参数,您不了解什么,以及您不想要的这种“蛮力”解决方案是什么样的?
  • “在 Javascript 中使用 splice 删除 JSON 数组中某个位置之后的所有元素” 当您使用 slice 时,它不再是 JSON。 JSON 是一种用于数据交换的文本表示法。
  • 这里的操作短语是您正在寻找truncate 某个位置之后的数组。 T.J.展示了如何设置 .length 来做到这一点。此外,您拥有的是一个 javascript 数组。 JSON 是一种文本格式。
  • 我在问你真正在问什么,因为它不容易理解。你有“JSON数组”,但没有这样的东西,你想使用splice,但同时不使用splice,你不想要“暴力解决方案”,那是什么,并且 T.J. 的解决方案肯定是“蛮力”,但它仍然可能正是您正在寻找的?

标签: javascript arrays json


【解决方案1】:

我想知道是否有一种简单的方法可以在 json 数组中的关键位置之后拼接出所有元素。

如果是关键位置之后的所有个元素,你可以这样做:

array.length = theKeyPosition;

例如:

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) {

【讨论】:

  • 谢谢,没想到会这么简单!
  • @Rohan:不用担心。 :-) 如果这回答了您的问题,请记住接受答案(但前提是接受)。
【解决方案2】:

对于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);

但是,我仍然更喜欢设置 length 属性,因为它应该更快(我找不到 JSPerf 结果,请在此处帮助我)。

MDNmy other answer 上阅读类似问题的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 2020-05-10
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    相关资源
    最近更新 更多