取消选中复选框后从数组中删除字符串

remove strings from array after uncheck the chekbox

我的复选框数据在这里,

$scope.dataList = {
    'ICT': true,
    'OTTIX_DT': true,
    'CP EMR AD': true,
}
<input type="checkbox" ng-model="miniAddons.dataList[data.jobName]" 
ng-change="pickExtra($event,'miniAddons', chosenMiniAddons, data.jobName);">

$scope.pickExtra = function(evt,JBname,chosenMiniAddons,chosenOptions){
    
    $scope.userSelectedMiniAddon = Object.keys($scope[miniAddons].dataList);

}

我的场景是 disable/enable 按钮,所以使用 var temp = Object.keys($scope.dataList) 让我喜欢 ['ICT','OTTIX_DT','CP EMR AD'] 然后我可以检查数组的 .length,基于数组长度,如果 length > 0 我会启用按钮 否则禁用它。

每当我单击复选框时,数组项都会按预期增加,但不知道如何在取消选中复选框时删除项。

简单来说,如果在 $scope.dataList 中一切正常 false 我需要禁用按钮,如果至少有一个键具有 true 值,我应该启用按钮。

目前使用纯旧的 JS,没有任何最新的 es6,所以对如何在纯旧的 js 中一起使用 filter 和 map 感到困惑。

请有人帮助我。

以题的当前信息来帮助你有点困难,但我感觉你的checklist并没有缩水,因为key没有从你的array中删除

尝试在您的 Object.keys(yourData)

上使用 filter function
$scope.dataList = {
    'ICT': true,
    'OTTIX_DT': true,
    'CP EMR AD': true,
}
<input type="checkbox" ng-model="miniAddons.dataList[data.jobName]" 
ng-change="pickExtra($event,'miniAddons', chosenMiniAddons, data.jobName);">

$scope.pickExtra = function(evt,JBname,chosenMiniAddons,chosenOptions){
    // Will filter out each option that is false, so the list will be empty if all are uncheked
    $scope.userSelectedMiniAddon = Object.keys($scope[miniAddons].dataList).filter((key => {
      if($scope[miniAddons].dataList[key]) { // check if the value is true.
        return key;
      }
    });

}