2017-09-29 130 views
0

当我从列表中选择项目并选择保存时,应从列表中删除项目。我能够使用此方法检索选定的项目 - form.value.selectedMessages - 它给我一个我选择的对象的数组。接收到的数组的总数是rMessages。这里发生的是我的两条消息都被删除,而不仅仅是被选中的消息。这可能是我错过的一件容易的事。欣赏它!从数组中删除所选对象

save(form){ 

    this.rMessages = this.rMessages.filter(resultTwo => { 

     form.value.selectedMessages.map(resultOne => { 

     return resultTwo.messageID !== resultOne.messageID 
     }) 

    }) 

} 

数据

消息的列表 - 如果一个被选中,那么下面应仅显示

[{messageID: 1, message: "message One"}, 
{messageID: 2, message: "message Two"}] 

选定消息,或者可以是两者

[{messageID: 1, message: "message One"}] 

回答

1

那么开始你需要在你的过滤器函数中返回一些东西;

在你的代码中没有任何回报。这意味着它将默认返回undefined,这基本上是false。因为它总是返回false,所以从数组中过滤所有内容。

该逻辑也看起来有点狡猾。

map将返回一个新的数组,我不认为这就是你想要的。相反,您可以根据您的情况使用findsomeevery。 这里是你的代码的重新设计版本find

this.rMessages = this.rMessages.filter(resultTwo => { 
     return !form.value.selectedMessages.find(resultOne => { 
      return resultTwo.messageID === resultOne.messageID 
     }) 
    }) 

下面是一个工作,修改实例但这个想法仍然是相同的

var rMessages = [1,2,3,4,5].map(item => {return {messageID:item}}); 
 
var selected = [2,5].map(item => {return {messageID:item}}); 
 
var form = { 
 
\t value:{ 
 
\t \t selectedMessages:selected 
 
\t } 
 
}; 
 
rMessages = rMessages.filter((resultTwo) => { 
 
    return !form.value.selectedMessages.find((resultOne) => { 
 
    return resultTwo.messageID === resultOne.messageID 
 
    }) 
 
}) 
 
    
 
console.log(rMessages)

+0

这个答案并不很遗憾工作,没有什么发生:(当我登录的功能之后this.rMessages,什么也不回来了。 – userlkjsflkdsvm

+0

@userlkjsflkdsvm很抱歉,一个bug,我调整了为你解答,并给工作示例。 –

+0

@userlkjsflkdsvm你provid附加码在你的问题编辑不会帮助调试这个。我会检查你认为你传递给你函数的值是否正确。看来这个bug跟这个函数没有关系,并且可能与原始问题 –