通过第一个列表中的项目索引将项目添加到第二个列表

时间:2016-10-01 00:18:47

标签: javascript angularjs

我有2个清单。

我有一个基于splice的方法的Angular服务,允许我通过items操作根据索引从第一个列表中删除项目(称为“ng-click”)

  service.removeItem = function (itemIndex) {
    items.splice(itemIndex, 1);
  };

我想要做的是使用传递给bought的相同索引将删除的项目添加到第二个列表(称为“slice”)。

我想也许我可以把这个功能放到同一个函数(removeItem)中,如下所示:

  service.removeItem = function (itemIndex) {
    bought.push(itemIndex);
    items.splice(itemIndex, 1);
  };

然而,这似乎不起作用。我尝试了一些不同的变体(如bought.push(items.itemIndex))。

2 个答案:

答案 0 :(得分:2)

使用splice在第二个数组中的同一索引处插入要删除的元素。

service.removeItem = function (itemIndex) {
    var currItem = items[itemIndex];
    // Insert the element to be removed
    // at the same index in the other array
    bought.splice(itemIndex, 0, currItem);
    items.splice(itemIndex, 1);
  };

或者不是手动访问元素,而是使用删除元素时返回的元素。

service.removeItem = function (itemIndex) {
    var currItem = items.splice(itemIndex, 1);
    bought.splice(itemIndex, 0, currItem);
};

答案 1 :(得分:1)

对splice的调用会从数组中删除该项,这很好。它返回它删除的元素。在这里查看doco:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

所以你的removeItem函数看起来像这样:

service.removeItem = function (itemIndex) {
    var removedItem = items.splice(itemIndex, 1);
    bought.push(removedItem);
};

问题是,你正在使removeItem方法一次做两件事。重命名它以反映它正在做的事情可能更好(例如" buyItem")。

或者有更高级别的功能来执行此操作

service.buyItem = function (itemIndex) {
    bought.push(removeItem(itemIndex);
}
service.removeItem = function (itemIndex) {
    return items.splice(itemIndex, 1);
};

这样你的removeItem函数在它的功能上是纯粹的,可以在其他地方使用