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

JavaScript中如何在同一对象内访问未提前声明的属性

问题:如何在创建对象时访问同一对象尚未声明的属性?

我有一个对象数组,需要遍历它来创建一个具有不同属性的新对象。问题在于创建新对象时,我需要访问一个尚未声明的属性。

源对象

let data = [
  {
    "name": "one",
    "total": 12,
    "fec": "001"
  },
  {
    "name": "one",
    "total": 1,
    "fec": "002"
  },
  {
    "name": "two",
    "total": 5,
    "fec": "001"
  }  
]

当前实现代码

let result;
data.forEach((item) => {
  result = {
    name: item.name,
    result: data.find((item) => item.fec === '001') ?.total,
    dto: this.result + 5
  }
})

我的问题是:在forEach()方法内部,如何从dto属性访问同一对象内的result属性?


解决方案

你原代码里的this.result无法生效,因为箭头函数中的this继承自外部作用域,根本指向不到正在创建的对象。下面是几种可行的解决方式:

1. 先创建基础对象,再补充依赖属性

先构建包含result的对象,之后再基于这个对象的属性计算dto:

let result;
data.forEach((item) => {
  // 先创建包含基础属性的临时对象
  const tempObj = {
    name: item.name,
    result: data.find(i => i.fec === '001')?.total
  };
  // 基于已存在的result属性计算dto
  tempObj.dto = tempObj.result + 5;
  result = tempObj;
})

2. 提前计算依赖值,再构建对象

把需要用到的result值单独计算出来,直接在对象中使用变量:

let result;
data.forEach((item) => {
  // 提前算出result对应的数值
  const fecTotal = data.find(i => i.fec === '001')?.total;
  result = {
    name: item.name,
    result: fecTotal,
    dto: fecTotal + 5
  };
})

3. 使用getter实现动态计算(适合属性可能变化的场景)

如果后续result的值可能改变,想让dto自动同步更新,可以用getter函数:

let result;
data.forEach((item) => {
  result = {
    name: item.name,
    result: data.find(i => i.fec === '001')?.total,
    // 访问dto时动态计算
    get dto() {
      return this.result + 5;
    }
  };
})

内容的提问来源于stack exchange,提问作者element

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:05:01