我有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)
)。
答案 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函数在它的功能上是纯粹的,可以在其他地方使用