如何删除(删除)对象数组中的特定项目

时间:2019-01-24 19:23:21

标签: javascript vuejs2

我想使用删除功能删除数组中的特定对象。

我尝试了splice()方法,但是无论我单击了哪个对象,它都会删除第一个数组

这是带有v-for方法的对象的代码

 <li v-for=" skill in skills" :key="skill.id">
        {{skill.skill}}
        <i class="fa fa-minus-circle v-on:click="remove(skill)"></i>
      </li>

这是Skill.vue

 <script>
import uuid from "uuid";
export default {
  name: "Skills",
  data() {
   return {
  skill: "",
  skills: [
    { id: uuid.v4(), skill: "Vue.js" },
    {
      id: uuid.v4(),
      skill: "Javascript"
    },
    {
      id: uuid.v4(),
      skill: "Rails"
    }
  ]
 };
},
methods: {
addSkill() {
  this.$validator.validateAll().then(result => {
    if (result) {
      this.skills.push({ skill: this.skill, id: uuid.v4() });
      this.skill = "";
    }
  });
},
remove(id) {
  this.skills.splice(id, 1);
 }
}

};   

如何构造方法

remove(id) {
  this.skills.splice(id, 1);
 }

要删除特定对象?

2 个答案:

答案 0 :(得分:2)

要使用splice(),应将项目的索引作为参数传递。要删除基于属性的项目,请考虑改用filter()

模板应为:

<li v-for="skills in skill" :key="skill.id">
  {{skill.skill}}
  <i class="fa fa-minus-circle v-on:click="remove(skill.id)"></i>
</li>

方法:

remove(id) {
  this.skills = this.skills.filter(skill => skill.id !== id);
}

它将返回数组的副本,其中不包含skill.id !== id等于false的项目。

答案 1 :(得分:1)

您应该传递索引:

array.splice(index,howmany,item1,.....,itemX)

splice

<li v-for=" (skills,index) in skill" :key="skill.id">
        {{skill.skill}}
        <i class="fa fa-minus-circle v-on:click="remove(index)"></i>
      </li>

如此:

remove(index) {
  this.skills.splice(index, 1);
 }