javascript - 如果数组值已经存在,则删除 JavaScript

标签 javascript jquery arrays angularjs

我有一个用 ng-repeat 显示的值数组。当我单击其中一个时,我将该值添加到另一个数组中。如果已经存在,我将其删除。在这里效果很好。但我有一个按钮可以在第二个按钮中推送所有数组。它正在工作,但即使值已经存在,我也可以无限次推送整个数组。当然,如果我检查一个或两个值,然后按“全选”,它必须选择所有值以及已经通过单个选择选择的值。顺便说一句,这是带有 jsfiddle 的代码:

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
    $scope.all_titles = [
        "Title 1",
        "Title 2",
        "Title 3",
        "Title 4"
        ];

    $scope.selection=[];

    $scope.getSelectedItem = function getSelectedItems(title) {
            var idx = $scope.selection.indexOf(title);
            // is currently selected
            if (idx > -1) {
                $scope.selection.splice(idx, 1);
            }
            // is newly selected
            else {
                if(Array.isArray(title)) {
                    for(var i=0;i<title.length;i++) {
                        $scope.selection.push(title[i]);
                    }
                } else {
                    $scope.selection.push(title);
                }
            }
        };
}

<div ng-controller="MyCtrl">
    <div>
        <button data-ng-click="getSelectedItem(all_titles)">
            Select all
        </button>
    </div>
    <div ng-repeat="title in all_titles">
        <a ng-click="getSelectedItem(title)">{{title}}</a>
    </div>

    <hr>
    <div>
        {{selection}}
    </div>
</div>

http://jsfiddle.net/HB7LU/20342/

最佳答案

我不太清楚你的情况。

如果您希望全选按钮表现得像所有链接都被点击,那么这就是您的解决方案:

$scope.getSelectedItem = function getSelectedItems(title) {
            if(Array.isArray(title)) {
                for(var i=0;i<title.length;i++) {
                    $scope.pushIt(title[i]);
                }
            } else {
                $scope.pushIt(title);
            }

    };

$scope.pushIt = function pushIt(title) {
        var idx = $scope.selection.indexOf(title);
        // remove if already in array
        if (idx > -1) {
            $scope.selection.splice(idx, 1);
        } else {
            $scope.selection.push(title);
        }
    };

如果您希望全选按钮添加其余项目,那么这就是您的解决方案:

$scope.getSelectedItem = function getSelectedItems(title) {

    if (Array.isArray(title)) {
        for (var i = 0; i < title.length; i++) {
            var idx = $scope.selection.indexOf(title[i]);
            // don't add if already in the array
            if (idx == -1) {
                $scope.selection.push(title[i]);
            }
        }
    } else {
        var idx = $scope.selection.indexOf(title);
        // is currently selected
        if (idx > -1) {
            $scope.selection.splice(idx, 1);
        } else {
            $scope.selection.push(title);
        }
    }

};

关于javascript - 如果数组值已经存在,则删除 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33941613/

相关文章:

javascript - 使用 Ajax 向经典 ASP 发送信息

javascript - 在页面加载时调用 javascript

jQuery 不在悬停时加载函数

c - 使用指针将数组传递给函数

arrays - 按类型对结构数组进行排序,然后按另一个属性按字母顺序排序

java - 生成长度 <= 5 的字符串数组子集

javascript - 如何停止所有事件的传播

用于验证数字是否以前导零开头的 Javascript 正则表达式

asp.net - JQuery 或任何其他 Javascript 库。用于开发 Web 应用程序

javascript - 添加对象数组中包含的值