按第一个列表中项目的索引将项目添加到第二个列表中
Add item to a 2nd list by index of item in the 1st list
我有两个列表。
我有一个基于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函数在它所做的事情中是纯粹的,可以在其他地方使用
相关文章:
- 角度的项目列表 ng 重复,ng 单击显示全宽描述
- 当在Ember中点击一个项目时,我如何将一个活动类添加到项目列表中
- 在javascript中搜索项目列表的性能
- 如何在角度js的自动完成下拉列表中对项目列表(按字母顺序)进行排序
- 从项目列表Jquery中仅选择(显示:块)元素
- 使用 JQuery 复选框筛选项目列表
- 如何在Javascript中设置随机生成的项目列表的样式
- 如何无限循环项目列表
- 将项目列表馈送到3列布局中
- Polymer 1.0:管理简单项目列表的最佳实践
- 从select创建项目列表/数组
- 渲染Backbone.js中项目列表中的项目
- 如何将特定项目信息链接到 emberjs 中项目列表中的模板
- 如何遍历项目列表并将其数据值推送到数组中
- NodeJS:如何使用异步.js来处理数据库中的项目列表
- 挖空 JS 构建项目列表
- 通过指定的文本检查项目列表 /w Jquery
- 如何制作一个项目列表,可以使用 Angular JS 单独切换
- 将单词“and”放在项目列表的文本中
- 优化显示简单项目列表的模型/视图