You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:32:02