将对象替换为AngularJS中数组中的现有值

时间:2017-02-19 22:57:42

标签: javascript angularjs arrays

我有一个ng-repeat,每个项目都有一个选择。

用户可以选择一个值(触发将对象推入数组的函数),但是他们也可以改变主意,在这种情况下代码只是用新值推送第二个对象,复制第一个对象

我怎样才能真正删除现有值,每次更换时只留下最后一个值?

这是我的HTML:

<select ng-change="insertproduct(pa.nom, basket)" ng-model="basket">
  <option ng-repeat="select in numberofproducts">{{select}}</option>
</select>

我的javascript:

$scope.numberofproducts = [1,2,3,4,5,6,7,8,9,10]

$scope.singleorder = [];

$scope.insertproduct = function(nom, basket){
  $scope.numero = {
    'producte': nom,
    'numero': basket
  };
  $scope.singleorder.push($scope.numero);
  console.log($scope.singleorder);
}

想法是创建一个条件,在该条件中,如果数组包含参数'producte'等于新参数的对象,则删除现有对象并推送新对象。

任何提示?

2 个答案:

答案 0 :(得分:0)

首先,使用findIndex方法检查singleorder数组中是否已存在具有相同属性的对象。

function duplicateOrder(order) { 
    return order.producte === nom;
}
var index = $scope.singleorder.findIndex(duplicateOrder);

注意:findIndex的browser support是有限的; Internet Explorer不支持它。

然后使用splice删除项目:

if(index > -1){
$scope.singleorder.splice(index, 1);
}

然后您可以推送新的。

您还应该清理您的编码风格:不要混用法语和英语,并使用 camelCase snake_case 你的功能是提高可读性。

答案 1 :(得分:0)

观察:

  • 使用AngularJS ngOptions属性代替ng-repeat
  • 您可以检查数组中元素的index是否已经存在,您可以轻松删除之前的元素。

<强>样本

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

myApp.controller('MyCtrl',function($scope) {
    $scope.numberofproducts = [1,2,3,4,5,6,7,8,9,10]

    $scope.newArray = [];

    $scope.insertproduct = function(basket) {
      var prevIndex = $scope.newArray.indexOf(basket);
      if(prevIndex > -1) {
        $scope.newArray.splice(prevIndex, 1);
      } else {
        $scope.newArray.push(basket);
      }
      console.log($scope.newArray);
    }
   
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="MyCtrl">
 <select ng-change="insertproduct(basket)" ng-model="basket" ng-options="select for select in numberofproducts">
</select>
</div>