如果存在,如何从数组中删除值或将其推入数组(如果不存在)?
HTML:
...
<button @click="addToOpenedMenuPosition(item.id)"
...
Run Code Online (Sandbox Code Playgroud)
Vue.js:
data: function() { return {
openedMenuPositionIds: [],
...
}
Run Code Online (Sandbox Code Playgroud)
一个简单的js实现
const arr = ["one","two","three"]; //example array
const newId="one"; //new id
if(!arr.includes(newId)){ //checking weather array contain the id
arr.push(newId); //adding to array because value doesnt exists
}else{
arr.splice(arr.indexOf(newId), 1); //deleting
}
console.log(arr);
Run Code Online (Sandbox Code Playgroud)
我假设这些元素是唯一的,所以:
它非常简单。您可以检查.includes()它是否在数组中,并使用 查找 id 的索引.indexOf。然后使用.splice()找到的索引查找元素,否则只需将其推入数组即可。
您需要return在那里“停止”该功能才能继续:
addToOpenedMenuPosition(id){
let arr = this.openedMenuPositionIds;
if(arr.includes(id)){
arr.splice(arr.indexOf(id), 1);
return;
}
arr.push(id);
}
Run Code Online (Sandbox Code Playgroud)
通过删除创建一个新数组item.id,但如果item.id不退出,则不会删除任何内容,我们可以安全地添加item.id,否则我们将返回删除后的修改后的数组item.id。
const newMenuPositionIds = menuPositionIds.filter(({id}) => id !== item.id);
if(newMenuPositionIds.length === menuPositionIds.length) {
newMenuPositionIds.push(item.id);
}
return newMenuPositionIds;
Run Code Online (Sandbox Code Playgroud)