AngularJS中如何在for循环中获取所有值?alert仅返回最后一个id值求助
问题分析与修复方案
嘿,我一眼就看出问题所在啦——你的循环逻辑里每次都在覆盖$scope.Thx的值,所以最后alert出来的自然只会是数组最后一个元素的id。
先拆解下你的原代码问题:
$scope.addToList = function (products,qty) { if ($scope.order.length > 0) { for (var i = 0; i < $scope.order.length; i++) { $scope.Thx=$scope.order[i].id; // 每次循环都把Thx替换成当前id } } }; alert($scope.Thx);
循环过程中,$scope.Thx会被反复赋值,从第一个元素的id一直替换到最后一个,循环结束后当然只剩最后一个值了。
接下来根据你的实际需求给两种修复方案:
需求1:获取所有order项的id(存入数组)
如果想把所有id都保存下来,应该用数组来存储,而不是单个变量:
$scope.addToList = function (products,qty) { $scope.Thx = []; // 先初始化一个空数组 if ($scope.order.length > 0) { for (var i = 0; i < $scope.order.length; i++) { $scope.Thx.push($scope.order[i].id); // 把每个id追加到数组里 } } alert($scope.Thx.join(', ')); // 用逗号分隔显示所有id,或者直接alert数组也可以 };
需求2:检查特定id是否存在于order中(比如当前产品的id)
如果你的真实需求是判断要添加的产品是否已经在订单里,那应该找到匹配项后就跳出循环,避免不必要的遍历:
$scope.addToList = function (products,qty) { $scope.Thx = null; // 默认设为null,表示未找到 if ($scope.order.length > 0) { for (var i = 0; i < $scope.order.length; i++) { // 假设要匹配的是传入的products的id if ($scope.order[i].id === products.id) { $scope.Thx = $scope.order[i].id; break; // 找到后立刻跳出循环,不用继续走剩下的迭代 } } } alert($scope.Thx); // 找到就显示对应id,没找到显示null };
如果你的需求不是这两种,可以补充说明具体要实现什么功能,我再帮你调整~
内容的提问来源于stack exchange,提问作者iam
相关产品推荐
相关产品推荐

