如何从火焰助手生成的数组中删除特定元素?

时间:2017-03-04 20:37:49

标签: javascript jquery arrays meteor-blaze

我有一个帮助器类,当选中复选框时将元素推入数组,并且在取消选中时应删除该元素。我能够成功地将元素推送到数组但是无法将其删除。

我注意到一些奇怪的行为。例如,取消选中该元素也会将其推送到数组中,而不是将其从数组中删除。如果我控制台记录索引值,我为每个我想要删除的数组元素得到-1。

这是Blaze Code:

Template.Job_setup_page.onCreated(function homePageOnCreated() {

    this.checkedJobs = [];

});

Template.Job_setup_page.events({
    'click .filled-in'(event, instance) {
        var currentId = event.target.id;

        if($(".filled-in").is(':checked')){
            instance.checkedJobs.push({
                instruction: currentId,
                quantity: 1
            })
        }
        else {
            var index = instance.checkedJobs.indexOf(currentId);
            instance.checkedJobs.splice(index, 1);
            console.log("This is the current Id", currentId);
            console.log("this is the index", index);
        };
    },
});

1 个答案:

答案 0 :(得分:0)

indexOf搜索元素本身,并且无法通过其instruction属性匹配对象。您应该使用for循环迭代checkedJobs数组并将每个instructioncurrentId进行比较,以便找到正确的索引。用以下内容替换else块的内容:

var jobs = instance.checkedJobs
for (var i = 0; i < jobs.length; i++) {
  if (jobs[i].instruction === currentId) {
    instance.checkedJobs.splice(i, 1)
    console.log('currentId:', currentId)
    console.log('index:', i)
  }
}