JavaScript问题:修正循环以统计数组对象val属性达标数量并生成目标对象
修正你的JavaScript代码,实现需求
我来帮你一步步梳理代码里的问题,调整后就能得到你想要的结果啦!
先看你代码里的几个核心错误:
- 对象键的赋值错误:你用
dict.key = i会把键固定为字符串"key",而不是循环的i数值,正确的方式是用dict[i]来动态设置键。 - 数组遍历方式错误:
for...in遍历数组拿到的是索引(字符串类型),不是数组元素,而且可能意外遍历到原型链属性,推荐用for...of或者数组方法(比如forEach、filter)。 - 条件判断语法错误:
array.Object.values(o)[0]完全不符合语法,你要访问的是每个数组元素的val属性,直接写item.val就好。 - 统计逻辑错误:你在判断里直接
count++并赋值,但应该先遍历完所有元素统计总数,再把结果赋值给对象的对应键,而不是每次判断都赋值。 - 循环范围超出需求:你需要的是10到59步长10(也就是10、20、30、40、50),但原循环写到了90,得调整范围。
修正后的代码(基础循环版)
let array = [{val:21, let:'a'}, {val:18, let:'b'}, {val:35, let:'c'}, {val:25, let:'d'}]; let dict = {}; // 用{}创建空对象比new Object()更简洁 // 循环范围调整为10到50,步长10 for (let i = 10; i <= 50; i += 10) { let count = 0; // 用for...of遍历数组的每个元素 for (const item of array) { // 判断当前元素的val是否大于当前键i if (item.val > i) { count++; } } // 给对象的动态键赋值统计结果 dict[i] = count; } console.log(dict); // 输出:{10: 4, 20: 3, 30: 1, 40: 0, 50: 0}
更简洁的写法(用数组filter方法)
如果想简化代码,可以用filter方法直接过滤出符合条件的元素,再取长度作为统计数:
let array = [{val:21, let:'a'}, {val:18, let:'b'}, {val:35, let:'c'}, {val:25, let:'d'}]; let dict = {}; for (let i = 10; i <= 50; i += 10) { // 过滤出val大于i的元素,length就是数量 dict[i] = array.filter(item => item.val > i).length; } console.log(dict); // 同样得到目标结果
验证结果
按照你的示例:
- 键10:所有4个元素的val都大于10 → 值为4
- 键20:val为21、35、25的3个元素符合 → 值为3
- 键30:只有val为35的1个元素符合 → 值为1
- 键40、50:没有元素val大于它们 → 值为0
完全符合你的预期!
内容的提问来源于stack exchange,提问作者Ison
相关产品推荐
相关产品推荐

