如何删除关于数组键的元素?

时间:2015-01-05 13:12:44

标签: javascript angularjs

我有一个javascript数组如下:

$scope.products = [
    {id:'1', name:'IPhone6', price: '1,000 AED', quantity: '2'},
    {id:'2', name:'Samsung Mini', price: '750 AED', quantity: '1'},
    {id:'3', name:'Dell Laptop', price: '1700 AED', quantity: '3'},
    {id:'4', name:'HCL Monitor 7"', price: '650 AED', quantity: '7'},
];

使用ng-repeat Angular js函数显示上面的数组。

我正在调用一个remove函数并将id作为参数传递。如何从数组中删除特定元素?

$scope.products.slice($id, 1)不是必需的。我必须删除id?请指教。

4 个答案:

答案 0 :(得分:2)

这应该有效:

// id = '3'

$scope.products = $scope.products.filter(function (p) { return p.id !== id });

答案 1 :(得分:1)

检查拼接方法

  1. Array.prototype.splice
  2. W3School - splice
  3. 您可能希望将带有id的元素的索引传递给remove函数,为此可以描述getIndexBy函数

    Array.prototype.getIndexBy = function (name, value) {
        for (var i = 0; i < this.length; i++) {
            if (this[i][name] == value) {
                return i;
            }
        }
    }
    

    并像

    一样使用它
    index=products.getIndexBy("id", 3) 
    

    其中3是您提供的ID。 然后,您可以在splice方法中使用此索引来删除特定元素。

    假设您要按索引取下元素。

答案 2 :(得分:1)

您可以定义utility function

(function(window) {
      var utility = window.utility|| (window.utility= {});
      function remove(items, fn) {           
           var toRemove = [];          
           angular.forEach(items, function(item, i) {  
               if (fn(item)) {
                  toRemove.push(i);
               }
            });
            angular.forEach(toRemove, function(index) {
                items.splice(index,1);
            });
      }

     angular.extend(utility, {
         'remove': remove
     });

})(window);

要使用此功能,请传递一个项目数组作为第一个参数,并将谓词函数作为第二个参数传递。谓词返回true的所有项目都将从数组中删除该项目:

示例:

删除名为“john”的所有用户:

utility.remove($scope.users, function(user) {
    return user.name == 'john';
});

删除ID为3的用户:

utility.remove($scope.users, function(user) {
    return user.id == 3;
});

答案 3 :(得分:1)

在这样的点击操作中使用$ index

ng-click='slice($index);'

和你的功能一样

$scope.slice = function(element){
    $scope.friends.splice(element, 1);
}

或者通过这个例子:

HTML代码

<ul>
   <li ng-repeat="product in products" ng-click='slice($index);'>
      [{{$index + 1}}] {{product.name}}
    </li>
</ul>

Javascript代码

$scope.products = [
                    {id:'1', name:'IPhone6', price: '1,000 AED', quantity: '2'},
                    {id:'2', name:'Samsung Mini', price: '750 AED', quantity: '1'},
                    {id:'3', name:'Dell Laptop', price: '1700 AED', quantity: '3'},
                    {id:'4', name:'HCL Monitor 7"', price: '650 AED', quantity: '7'},
                  ];

$scope.slice = function(element){
     $scope.friends.splice(element, 1);
}