首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用JavaScript切换数组中的元素?

如何使用JavaScript切换数组中的元素?
EN

Stack Overflow用户
提问于 2013-06-18 01:21:19
回答 8查看 39.6K关注 0票数 53

下面是我为这个简单任务编写的javascript代码:

如果元素存在于数组中,则对其执行

  1. Remove操作。

如果元素不在数组中,则使用

  1. Add

if(_.contains(this.types,type_id)){ var index = this.types.indexOf(type_id);this.types.splice(index,1);} else{ this.types.push(type_id);}

有没有更有效的方法来做到这一点?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-06-18 01:45:27

如果你关心效率,那么使用一个数组来实现一个集合可能不是一个好主意。例如,使用一个你可以做的对象:

代码语言:javascript
复制
function toggle(S, x) {
    S[x] = 1 - (S[x]|0);
}

然后,在多次添加/删除操作之后,您只能保留值为1的键

这样,每次添加/删除都是O(1)的,您只需执行一次O(n)操作即可获得最终结果。

如果密钥都是“小”数字,则位掩码甚至值得努力(未测试)

代码语言:javascript
复制
function toggle(S, x) {
    var i = x >> 4;
    S[i] = (S[i]|0) ^ (1<<(x&15));
}
票数 19
EN

Stack Overflow用户

发布于 2013-06-18 01:36:09

你可以在没有第三方库的情况下做到这一点,这样会更有效率。(这只会删除找到的值的第一个实例,而不是多个)

Javascript

代码语言:javascript
复制
var a = [0, 1, 2, 3, 4, 6, 7, 8, 9],
    b = 5,
    c = 6;

function addOrRemove(array, value) {
    var index = array.indexOf(value);

    if (index === -1) {
        array.push(value);
    } else {
        array.splice(index, 1);
    }
}

console.log(a);

addOrRemove(a, b);
console.log(a);

addOrRemove(a, c);
console.log(a);

输出

代码语言:javascript
复制
[0, 1, 2, 3, 4, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 6, 7, 8, 9, 5]
[0, 1, 2, 3, 4, 7, 8, 9, 5] 

jsfiddle

票数 60
EN

Stack Overflow用户

发布于 2016-10-20 17:15:54

您可以使用lodash函数"xor":

代码语言:javascript
复制
_.xor([2, 1], [2, 3]);
// => [1, 3]

如果没有数组作为第二个参数,可以简单地将变量包装到一个数组中

代码语言:javascript
复制
var variableToInsertOrRemove = 2;
_.xor([2, 1], [variableToInsertOrRemove]);
// => [1]
_.xor([1, 3], [variableToInsertOrRemove]);
// => [1, 2, 3]

这里是文档:https://lodash.com/docs/4.16.4#xor

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17153238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档