如何在不复制数组的情况下返回 Javascript 中的数组减去单个项目? [复制]
Posted
技术标签:
【中文标题】如何在不复制数组的情况下返回 Javascript 中的数组减去单个项目? [复制]【英文标题】:How do you return an array in Javascript minus a single item without copying the array? [duplicate] 【发布时间】:2012-11-03 04:17:39 【问题描述】:可能重复:Remove item from array by value
我正在维护字符串列表,例如
var keyString = [];
keyString.push("anotherString");
keyString.push("yetAnotherString");
keyString.push("oneLastString");
我希望能够返回来自 keyString
的所有结果,减去我已经知道的值。
例如,如果我有 anotherString,那么我想返回数组中不是 anotherString 的所有内容。
显然这可以通过几种方式轻松完成,但我有一些限制。
我不希望解决方案使用任何循环,也不希望使用过多的内存,也不希望修改原始数组。
这可能是不可能的,但我想我会把它扔在那里看看是否存在。
【问题讨论】:
您不想复制数组,也不想修改原始数据,但您希望最终得到原始数据的修改版本。这究竟是如何工作的? 这里有一些神奇的粉末可以让它消失。 这不是从数组中删除某些东西的远程副本。 在您更改问题以使其成为不可能的请求之前,它是完全重复的。 @user1689607:可能是 OP 的 other 帐户来补偿否决票... 【参考方案1】:考虑到您的示例代码的一些可能性,但在函数内部(或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;
【讨论】:
仅作记录,.splice
和 .unshift
很可能是线性时间的,尽管可能使用本机代码实现。 (也就是说,如果这对 OP 很重要,它们可能在内部是“循环”。)
这些不起作用,因为我无法保证它是数组中的第一项或最后一项,并且 splice 会修改原始数组。 (我将对其进行编辑以将其作为限制)
@user1500053 所以你不想修改原始数组,也不想复制?那我想没办法了。
@Pointy 抱歉问,OP 是什么意思。今天看了好几遍了,还没弄明白
我在想也许有某种方法可以返回一个数组,该数组是对原始数组中对象的引用。但我想,回想起来,数组只是对对象的引用,所以过滤器可能会起作用。【参考方案2】:
不是防弹的,但它有效:
var a = ["a", "b", "c", "d"];
a.splice( a.indexOf("c"), 1 );
console.log(a); // ["a", "b", "d"];
【讨论】:
【参考方案3】:您可以使用filter()
,但这也会返回一个新数组:
var newArray = keyString.filter( function( el )
return el !== 'anotherString';
);
【讨论】:
以上是关于如何在不复制数组的情况下返回 Javascript 中的数组减去单个项目? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在不复制对象的情况下向 Python 公开返回 C++ 对象的函数?
如何在不使用outerHTML的情况下在javascript中将标签作为文本? [复制]