我有一个数组定义如:
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]。 我做错了什么?
答案 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]);
}