Javascript 如何仅在数组不存在时将值追加到数组中,如果不存在则将其删除?

Javascript 如何仅在数组不存在时将值追加到数组中,如果不存在则将其删除?,javascript,arrays,Javascript,Arrays,我有一个initialArray=[1,2,3,4,5,6] 我想添加此[1,2,3] 1/如果[1,2,3]存在于initialArray中,我想将其从initialArray中删除 因此结果将是[4,5,6] 2/然后我想再次添加[1,2,3],现在[1,2,3]不再存在于初始数组中 因此,在这种情况下,结果将是[4,5,6,1,2,3] 3/现在我想添加[1,2,3,4,5,6]。因此,在这种情况下,结果将是[] 我尝试使用.filter()删除现有的值,效果很好。但如果值不存在,我就不能

我有一个
initialArray=[1,2,3,4,5,6]

我想添加此
[1,2,3]

1/如果
[1,2,3]
存在于
initialArray
中,我想将其从
initialArray
中删除

因此结果将是
[4,5,6]

2/然后我想再次添加
[1,2,3]
,现在
[1,2,3]
不再存在于
初始数组中

因此,在这种情况下,结果将是
[4,5,6,1,2,3]

3/现在我想添加
[1,2,3,4,5,6]
。因此,在这种情况下,结果将是
[]

我尝试使用
.filter()
删除现有的值,效果很好。但如果值不存在,我就不能“concat”。我不能同时做这两件事

我该怎么办

const initialArray = []; // your initial array
const add = []; // stuff you want to add

const { filtered, toAdd }  = initialArray.reduce((acc, curr) => {
    const index = acc.toAdd.findIndex(v => v === curr);
    index === -1 ? acc.filtered.push(curr) : acc.toAdd.splice(index, 1); 
    return acc;
}, { filtered: [], toAdd: [...add] });

const final = [...filtered, ...toAdd];
如果您的initialArray有重复的值,您可以这样做

const initialArray = [...new Set(initialArrayWithDuplicates)];

您可以使用indexOf方法,所以它可能看起来像这样(基本示例为您提供了一个想法):

考虑到这一点,下面的代码将意外地检查您试图插入数组的值是否存在allready内部,因此它将删除它:

for(var i = arrayWithNumbers.length - 1; i >= 0; i--) {
    if(arrayWithNumbers[i] === number) {
       arrayWithNumbers.splice(i, 1);
    }
}

您可以迭代数组以添加和搜索索引,然后推送值或拼接数组

此解决方案对原始阵列进行变异

函数添加(目标、源){
source.forEach(v=>{
var p=目标指数(v);
如果(p==-1){
目标推送(v);
}否则{
靶剪接(p,1);
}
});
回报目标;
}
var数组=[1,2,3,4,5,6];
添加(数组[1,2,3]);
console.log(数组);//[4, 5, 6]
添加(数组[1,2,3]);
console.log(数组);//[4, 5, 6, 1, 2, 3]
添加(数组[1,2,3,4,5,6]);

console.log(数组);//[]
另一种方法是对原始数组进行变异:

constinitialarray=[1,2,3,4,5,6];
常量toggleElements=(数组,更改)=>
array.toString()包括(更改)
? array.splice(array.indexOf(change[0]),change.length)
:array.push(…change);
切换元素(初始数组[1,2,3]);
log(initialArray);
切换元素(初始数组[1,2,3]);

log(initialArray)
@Steffi如果我的问题帮助你接受它作为答案,请。我对你的答案投了赞成票,但我已经接受了另一个同样有效的答案,但谢谢你谢谢尼娜!!它起作用了!是 啊那也行!非常感谢你!
for(var i = arrayWithNumbers.length - 1; i >= 0; i--) {
    if(arrayWithNumbers[i] === number) {
       arrayWithNumbers.splice(i, 1);
    }
}