javascript - indexof - 检查一个值是否已经在 javascript 数组中)

标签 javascript angularjs

我正在使用 angular,我正在尝试创建一个“全选”按钮。

我有一个项目列表,每个项目都有一个切换,我正在做的是,在更改时(每次切换从真(选中)变为假(未选中)时,我运行一个函数来创建一个数组所选元素的所有 ID。

这几乎完美地工作,问题是我在使用 indexfOf 方法检查 ID 是否已经在数组中时遇到了一些问题。

var isInArray;

isInArray = function(arr, id) {
  console.log("index of ", arr.indexOf(id));
  return arr.indexOf(id);
};


scope.evtSelectAll = function() {
  return angular.forEach(scope.listToDisplay, function(element) {
    element.copyTo = true;
    return scope.selectFromList(element.iID, element.copyTo);
  });
};

scope.selectFromList = function(id, copy) {
  if (copy === true && isInArray(scope.selected, id) === -1) {
    scope.selected.push(id);
  } else {
    scope.selected.pop(id);
  }
  console.log("scope.selected - ", scope.selected);
  if (scope.selected.length > 0) {
    console.log("Emitted event: can proceed!");
    scope.$emit('enough-elements');
  } else {
    console.log("Emitted event: can not proceed!");
    scope.$emit('not-enough-elements');
  }
  return scope.result = scope.selected;
};

我遇到的问题是数组 (scope.selected) 有多个 ID。

例如,假设我的 scope.selected 看起来像这样:

scope.selected = [2,3,4,7]

如果我单击全选,则不会添加任何内容(这是正确的)

现在,假设我取消勾选 4 和 7,我的 scope.selected 现在看起来像这样:

scope.selected = [2,3]

如果我现在点击全选,我的结果如下:[2,4,7]。

我输了 3

我认为这是因为我的数组没有一项吗?

感谢您的帮助。这也是一个快速 codepen来解释问题。如果您查看控制台并使用开关,您应该能够立即明白我指的是什么。

提前致谢

最佳答案

感谢 MatthiasChristian Bonato 的建议。

最后,我使用他们的两个建议解决了问题,最终结果似乎按预期工作。

这是带有最终版本的代码笔:http://codepen.io/NickHG/pen/KNXPBb

基本上,我改变了

scope.selected.pop(id);

$scope.selected.splice( isInArray($scope.selected, id),1);

在 selectAll 事件函数中,我总是在向数组添加元素之前清空 scope.selected[]

$scope.evtSelectAll = function() {
$scope.selected = []
angular.forEach($scope.list, function(element) {
  element.copyTo = true;
  return $scope.selectFromList(element.id, element.copyTo);
});

};

谢谢你的帮助!

关于javascript - indexof - 检查一个值是否已经在 javascript 数组中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40843491/

相关文章:

javascript - getBoundingClientRect() 导致 javascript 崩溃?

javascript - 初学者 angularjs - 在指令中包含指令

javascript - 如何找到某个函数被调用的地方?

javascript - 使用 jQuery 选择具有数据属性 *not* 的元素

javascript - React 组件未渲染

angularjs - 在 angular.js 应用程序中全局进行错误处理的最佳方法是什么?

javascript - 水平显示卡片列表,带有 Angular 和 MaterializeCSS 的 HTML/CSS

javascript - $注入(inject)器:modulerr Injecting Custom Module Into Angular App

angularjs - 如何在链式 promise 中间停止/中断

用于丰富交互的 JavaScript 库