提问人:Hack-R 提问时间:10/1/2016 最后编辑:Sushanth --Hack-R 更新时间:10/1/2016 访问量:62
按第 1 个列表中的项索引将项目添加到第 2 个列表
Add item to a 2nd list by index of item in the 1st list
问:
我有 2 个列表。
我有一个 Angular 服务,它有一个基于 的方法,允许我通过操作根据它们的索引从第一个列表(称为“”)中删除项目。splice
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赞
Sushanth --
10/1/2016
#1
用于在第二个数组的同一索引处插入要删除的元素。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赞
Mikkel
10/1/2016
#2
对 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 方法一次执行 2 件事。最好重命名它以反映它正在做什么(例如“buyItem”)。
或者有一个更高级别的函数来执行此操作
service.buyItem = function (itemIndex) {
bought.push(removeItem(itemIndex);
}
service.removeItem = function (itemIndex) {
return items.splice(itemIndex, 1);
};
这样一来,removeItem 函数的功能是纯粹的,并且可以在其他地方使用
评论
0赞
Hack-R
10/1/2016
谢谢迈克。我认为你在第一部分是绝对正确的。我不知道我是否可以将添加和删除分成 2 个不同的功能,因为当单击按钮从第一个列表中删除项目时,它应该出现在第二个列表中。我不想再介绍另一个按钮。或者是否可以赋予 2 个不同的功能?对不起,如果这很明显,我学习 Angular 才一周。ng-click
1赞
Mikkel
10/1/2016
这没什么大不了的,通常有人写服务会建议一个高级级别,因为服务可以很容易地从代码中的其他地方使用——通常人们把实用函数放在服务中。如果你只是给它一个更具描述性的名字,那么它就没问题了。下周你可以成为完全的职业选手:)
评论