AngularJS/Ionic中如何获取数组对象priority属性的最大值
解决AngularJS中对象数组priority属性最大值获取问题
嘿,我明白你遇到的priority冲突问题了——之前复用删除项的逻辑确实容易踩坑,尤其是多次增删后,很容易出现重复值。你之前写的$scope.priority = Math.max(parseInt($rootScope.obiadki.priority));之所以没用,是因为$rootScope.obiadki是对象数组,直接取它的priority属性根本不存在,parseInt之后得到的是NaN,Math.max处理NaN自然得不到正确结果。
正确的解决方案:提取所有priority值再取最大值
我们需要先把数组里每个对象的priority属性单独提取出来,形成一个纯数值数组,再用Math.max获取最大值,最后加1作为新的priority。这样不管之前删过哪些项,新的priority始终是当前所有值里最大的那个+1,彻底避免冲突。
方法1:使用原生JS的map和扩展运算符(简洁高效)
// 提取所有对象的priority并转为整数 const priorities = $rootScope.obiadki.map(item => parseInt(item.priority, 10)); // 计算最大值,数组为空时默认0,新增就用1 $scope.priority = priorities.length ? Math.max(...priorities) + 1 : 1;
map方法会遍历obiadki数组,把每个对象的priority转成整数后存入新数组priorities- 扩展运算符
...把数组元素展开,作为Math.max的参数,这样就能正确计算出最大值 - 加个长度判断是为了处理数组为空的情况(比如第一次新增数据)
方法2:使用AngularJS的forEach(兼容旧环境)
如果你的项目需要兼容不支持ES6语法的旧浏览器,可以用Angular自带的forEach来遍历计算:
let maxPriority = 0; angular.forEach($rootScope.obiadki, item => { const currentPrio = parseInt(item.priority, 10); // 跳过无效的数值,避免NaN影响结果 if (!isNaN(currentPrio) && currentPrio > maxPriority) { maxPriority = currentPrio; } }); $scope.priority = maxPriority + 1;
这个方法手动遍历每个对象,逐个比较更新最大值,逻辑更直观,还加了NaN的判断,防止后端返回异常数据导致计算错误。
为什么这个方案能解决你的冲突?
比如你现在有6条数据,priority是1-6,删除第4条后,当前最大的priority还是6。用这个方法新增时,会取6+1=7,而不是去复用被删除的4;下次新增时,最大priority变成7,新值就是8,完全不会出现取到已存在的5的情况。
内容的提问来源于stack exchange,提问作者SupremeDEV
相关产品推荐
相关产品推荐

