从数组中删除所选对象

时间:2017-09-29 21:18:00

标签: angular ionic-framework ionic2 ionic3

当我从列表中选择项目并选择保存时,该项目应从列表中删除。我能够使用此方法检索所选项目 - 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"}]

如果选择One,则下面只显示

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

1 个答案:

答案 0 :(得分: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 = {
	value:{
		selectedMessages:selected
	}
};
rMessages = rMessages.filter((resultTwo) => {
  return !form.value.selectedMessages.find((resultOne) => {
    return resultTwo.messageID === resultOne.messageID
  })
})
    
console.log(rMessages)