-1

可能重复:
按值从数组中删除项目

我正在维护字符串列表,例如

var keyString = [];

keyString.push("anotherString");
keyString.push("yetAnotherString");
keyString.push("oneLastString");

我希望能够从keyString我已经知道的更少的值中返回所有结果。

例如,如果我有anotherString,那么我想返回数组中不是anotherString的所有内容。

显然,这可以通过几种方式轻松完成,但我有一些限制。

我不希望解决方案使用任何循环,也不希望使用过多的内存,也不希望修改原始数组

这可能是不可能的,但我想我会把它扔在那里,看看是否存在任何东西。

4

3 回答 3

2

您可以使用filter(),但这也会返回一个新数组:

var newArray = keyString.filter( function( el ) {
  return el !== 'anotherString';
} );
于 2012-11-14T16:22:31.317 回答
2

考虑到您的示例代码的一些可能性,但在函数内部(或return没有意义)。这些示例假设您可以修改原始数组,因为您不想复制。

1.使用shift删除第一个元素

function something() {
    someObject["keyString"] = [];
    someObject["keyString"].push("anotherString");
    someObject["keyString"].push("yetAnotherString");
    someObject["keyString"].push("oneLastString");
    someObject["keyString"].shift(); 
    return someObject;
}

2.使用pop删除最后一个元素

function something() {
    someObject["keyString"] = [];
    someObject["keyString"].push("yetAnotherString");
    someObject["keyString"].push("oneLastString");
    someObject["keyString"].push("anotherString");
    someObject["keyString"].pop(); 
    return someObject;
}

3. 使用splice移除中间元素

function something() {
    someObject["keyString"] = [];
    someObject["keyString"].push("yetAnotherString");
    someObject["keyString"].push("anotherString");
    someObject["keyString"].push("oneLastString");
    someObject["keyString"].splice(1,1); 
    return someObject;
}
于 2012-11-14T16:22:44.747 回答
2

不是防弹的,但它有效:

var a = ["a", "b", "c", "d"];
a.splice( a.indexOf("c"), 1 );

console.log(a); // ["a", "b", "d"];
于 2012-11-14T16:24:13.580 回答