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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

这是我为这个简单的任务的JavaScript代码:

  1. 如果元素存在于数组中,请将其删除
  2. 如果元素不在数组中,请添加该元素。 if(_.contains(this.types,type_id)){ var index = this.types.indexOf(type_id); this.types.splice(index,1); } else{ this.types.push(type_id); }

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

提问于
用户回答回答于

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

function toggle(S, x) {
    S[x] = 1 - (S[x]|0);
}

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

这种方式每增加/删除O(1),你只需要一个O(n)操作来获得最终结果。

如果密钥都是“小”数字可能是一个位掩码甚至是值得的努力(未经测试)

function toggle(S, x) {
    var i = x >> 4;
    S[i] = (S[i]|0) ^ (1<<(x&15));
}
用户回答回答于

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

使用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);

Output

[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上

扫码关注云+社区