如何仅为数组中Top为true的对象更新No字段连续编号?
如何为数组中Top为true的项设置连续编号
问题分析
你需要给数组中所有Top为true的对象设置连续的字符串编号,Top为false的对象保持No为空。原代码的问题在于使用数组的索引值生成编号,这会把所有数组元素的位置都算进去,而不是只统计Top为true的项,导致编号不符合预期。
正确实现代码
可以通过一个独立的计数器来统计Top为true的项数量,遍历数组时根据Top的值决定是否更新编号:
let count = 0; for (let i = 0; i < arr.length; i++) { if (arr[i].Top) { count++; arr[i].No = count.toString(); // 转成字符串类型,匹配期望结果格式 } else { arr[i].No = ""; // 保持空字符串 } }
代码解释
- 初始化
count变量作为计数器,初始值为0。 - 遍历数组时,每遇到
Top为true的对象:- 计数器
count加1 - 将
count转为字符串赋值给No(符合你期望的字符串格式编号)
- 计数器
- 遇到
Top为false的对象时,直接将No设为空字符串。
运行这段代码后,就能得到你期望的结果:
[ {No: "1", Title: "John", Top: true}, {No: "", Title: "John", Top: false}, {No: "", Title: "John", Top: false}, {No: "2", Title: "Kyle", Top: true}, {No: "3", Title: "Jonnah", Top: true}, {No: "", Title: "Jonnah", Top: false}, {No: "4", Title: "Hyuri", Top: true}, {No: "", Title: "Hyuri", Top: false}, {No: "", Title: "Hyuri", Top: false}, ]
补充说明
如果你不想修改原数组,可以使用map方法创建一个新数组:
let count = 0; const newArr = arr.map(item => { if (item.Top) { count++; return {...item, No: count.toString()}; } return {...item, No: ""}; });
内容的提问来源于stack exchange,提问作者DiN CS
相关产品推荐
相关产品推荐

