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

Add item to a 2nd list by index of item in the 1st list

本文关键字:项目 列表 添加 第二个 第一个 索引      更新时间:2023-09-26

我有两个列表。

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

  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))不成功。

使用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);
};

调用splice从数组中删除项目,这很好。它返回被删除的元素。参考文档: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函数在它所做的事情中是纯粹的,可以在其他地方使用