从数组中删除项目并将其添加到另一个数组

时间:2017-03-23 08:31:33

标签: javascript arrays typescript

我向用户显示一系列包含内容的div,用户可以从页面中删除div,以便他们不再看到它。

我想从数组中删除相同的div内容并将其添加到另一个用于填充下拉列表的数组中。

这就是我所拥有的:

//Remove function
removeCategory(index: number): void {
    this.categories.splice(index, 1);
}
//Array
categories: Array<Item> = [
    new Item(1, 'test1'),
    new Item(2, 'test2')
];
//New Array to add previous removed item
ddoptions: Array<object> = [];

是否可以在removeCategory函数中的splice之前执行push语句?我不确定要传递什么,因为这样做会给我一个错误:

this.ddoptions.push(index);

3 个答案:

答案 0 :(得分:4)

您可以直接拼接到push方法,因为splice会返回已删除的对象。

this.ddoptions.push(this.categories.splice(index, 1)[0]);

splice方法实际上返回一个已删除的元素数组。在您的情况下,您只删除一个,以便上述代码工作。如果要删除一个或多个元素,可以使用多种方法将这些元素添加到第二个数组中。

通过使用concat生成新数组:

this.ddoptions = this.ddoptions.concat(this.categories.splice(index, 1));

这可能会破坏因为ddoptions不再是同一个对象。这取决于你正在做什么以及角度正在做什么。

您可以通过应用推送原型将数组作为多个参数传递。

[].push.apply(this.ddoptions, this.categories.splice(index, 1));

这样,ddoptions将保持为同一个数组,并将所有新元素推入其中。

答案 1 :(得分:2)

Splice返回已删除元素的数组。你可以添加一个数组的大小测试,以确保里面有一个元素..

//Remove function
removeCategory(index: number): void {
    var deletedElement = this.categories.splice(index, 1);
    ddoptions.push(deletedElement[0]);
}

答案 2 :(得分:2)

Array#splice方便地返回包含已删除元素的数组:

removeCategory (index) {
  this.ddoptions.push( this.categories.splice(index, 1)[0] )
}

<小时/>

View TypeScript Demo

<小时/>

JavaScript演示:

class Item {
  constructor(a, b) { return [a, b] }
}

class Example {
  removeCategory (index) {
    this.ddoptions.push( this.categories.splice(index, 1)[0] )
  }
  //Array
  categories = [
    new Item(1, 'test1'),
    new Item(2, 'test2')
  ]
  //New Array to add previous removed item
  ddoptions = []
}

var example = new Example()

example.removeCategory(1)

console.log(example.ddoptions)