如果存在,则从数组中删除值,如果不存在,则将其推送到数组

时间:2017-12-29 07:55:23

标签: javascript arrays angular

我有一个数组定义如:

selectedDocumentID = [];

接下来我有功能,当我得到ID,和其他功能,我给id作为参数。当我点击带有id的元素时,这个id将转到此modifyArray。 接下来我使用console.log检查id(它正在工作,我得到id)。 之后,我创建一个包含selectedDocument数组的新数组列表。 (这行得通)。 我想推送列出一个id,如果它不存在或者如果存在只是从列表中切片...

modifyArray(id) {
  let selectedDocumentID = [];

  let id = 10;

  console.log('this is: ' + id);
  console.log(this.selectedDocumentID);
  let list = this.selectedDocumentID;

  let index = list.findIndex( x => x === id);
  console.log(index);
  if (index !== id) {
    list.push(id);
    console.log(list);
    this.selectedDocumentID = list;
  }
  else {
    list = list.slice(list.indexOf(id));
    console.log(list);
    this.selectedDocumentID = list;
  }
}

所以对于exmaple。我点击ID为2,4,5,6的文件。

我的selectedDocumentID = [2,4,5,6]和列表也有[2,4,5,6]。

接下来,我点击文件ID为8,我的数组= [2,4,5,6,8], 之后,我点击文件ID为5,我的数组你看起来像[2,4,6,8]。 我做错了什么?

Code sample:

4 个答案:

答案 0 :(得分:1)

您必须使用splice删除:

list.splice(index, 1);

slice只提取一部分,我想你也可以使用,但是之后会这样:

list = list.slice(index, index + 1);

答案 1 :(得分:1)

您可以尝试以下代码段

var index = list.findIndex(x => x==id)
// here you can check specific property for an object whether it exist in your array or not

if (index === -1){
    list.push(id);
}
else console.log("object already exists")

<强>更新 您的代码中的问题是您要覆盖列表

modifyArray(id) {
  let selectedDocumentID = [];

  let id = 10;

  console.log('this is: ' + id);
  console.log(this.selectedDocumentID);
  let list = this.selectedDocumentID;

  let index = list.findIndex( x => x === id);
  console.log(index);
  if (index !== id) {
    list.push(id);
    console.log(list);
    this.selectedDocumentID = list;
  }
  else {
  list.slice(list.indexOf(id));
    console.log(list);
    this.selectedDocumentID = list;
  }
}

答案 2 :(得分:1)

你也可以通过javascript实现这个目标

var tag_story = [];
function checkElemet()
{  
  var  id_tag = document.getElementById("ele").value,
    position = tag_story.indexOf(id_tag); 
  if ( ~position ) tag_story.splice(position, 1);
  else tag_story.push(id_tag);
  console.log(tag_story);
}
<input id="ele" type="text" placeholder="Enter Value"/>
<input type="button" onclick="checkElemet()" value="check"/>

答案 3 :(得分:0)

您可以使用xor lodash函数来简化代码。例如:

modifyArray(id) {
  this.selectedDocumentID = _.xor(this.selectedDocumentID, [id]);
}