如何在不复制数组的情况下在Javascript中返回一个数组而不是单个项目?

时间:2012-11-14 16:18:00

标签: javascript node.js sorting

  

可能重复:
  Remove item from array by value

我正在维护像

这样的字符串列表
var keyString = [];

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

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

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

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

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

这可能是不可能的,但我想我会把它扔出去看看是否存在。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

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

var newArray = keyString.filter( function( el ) {
  return el !== 'anotherString';
} );

答案 2 :(得分:1)

不是防弹但它有效:

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

console.log(a); // ["a", "b", "d"];