【发布时间】:2017-01-12 20:24:41
【问题描述】:
首先,我有一个包含如下对象元素的数组:
$scope.selectedIngredient = [object1, object2, object3, object1, object2];
其次,我有一个新对象:
$scope.selectedIngredientResults = {};
现在我想在javascript中实现一个这样的功能:
计算数组的每个对象元素,并将它们放入一个新对象中并存储每个对象
计数
$scope.selectedIngredientResults = [
{"object" : object1, "count" : 2},
{"object" : object2, "count" : 2},
{"object" : object3, "count" : 1}
];
[![这里是新的对象结果,这就是我想要的,
我正在尝试使用
$scope.addIngredient = function(selectedElement) {
console.log('selectedElement', selectedElement);
$scope.selectedIngredient.push(selectedElement);
console.log('$scope.selectedIngredient' , $scope.selectedIngredient);
$scope.selectedIngredientResults = {};
var lengthofR = $scope.selectedIngredient.length;
for (var i = lengthofR - 1; i >= 0; i--) {
var selected = $scope.selectedIngredient[i]['ingredient_id'];
console.log('lengthofR', lengthofR);
if(selected){
if($scope.selectedIngredientResults.hasOwnProperty(selected)){
$scope.selectedIngredientResults[$scope.selectedIngredient]++;
}else {
$scope.selectedIngredientResults[$scope.selectedIngredient] = 1;
}
console.log('$scope.selectedIngredientResults', $scope.selectedIngredientResults );
}
}
}
【问题讨论】:
-
您如何将两个对象识别为相同的(实际上是相同的对象,还是只是相同的属性)?
-
请添加一些数据进行计数。
-
@Paddy 每个对象都有成分 ID 并使用 obj.hasOwnProperty 来识别 for (var i = lengthofR - 1; i >= 0; i--) { var selected = $scope.selectedIngredient[i] ['ingredient_id']; console.log('lengthofR', lengthofR); if(selected){ if($scope.selectedIngredientResults.hasOwnProperty(selected)){ $scope.selectedIngredientResults[$scope.selectedIngredient]++; }else { $scope.selectedIngredientResults[$scope.selectedIngredient] = 1; }
-
我知道这不是答案,但对于这种任务,lodash 很棒lodash.com
-
如果这是一个 AngularJS 问题,请将其标记为这样,因为它可能会增加与 vanilla Javascript 不同的注意事项。
标签: javascript angularjs arrays object