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

如何在JavaScript类中利用数组索引为数组元素定义price属性

解决方案

要实现需求,你需要把原奶昔数组里的字符串元素转换为对象(因为原始字符串没法稳定保存自定义属性),同时在转换过程中利用元素的索引n计算价格。以下是两种可行的实现方式:

方法一:转为对象数组(常规方案)

修改cafe类的构造函数,遍历奶昔数组,把每个字符串转换成包含口味名称和price属性的对象:

class Cafe {
  constructor(menu) {
    this.iceCreams = menu[0];
    // 遍历数组时拿到索引n,用它计算价格
    this.milkshakes = menu[1].map((flavor, n) => {
      // 这里写基于n的价格计算逻辑,示例为 (索引+1)*5
      const price = (n + 1) * 5;
      return { flavor, price };
    });
  }
}

// 使用示例
const menu = [
  ['vanilla', 'chocolate', 'almond'],
  ['vanilla', 'pineapple', 'strawberry']
];
const myCafe = new Cafe(menu);
console.log(myCafe.milkshakes[0].price); // 输出 5
console.log(myCafe.milkshakes[1].price); // 输出 10

这样你可以通过myCafe.milkshakes[n].price获取对应奶昔的价格,通过myCafe.milkshakes[n].flavor获取口味名称,逻辑清晰且易于维护。

方法二:保留字符串访问方式(进阶方案)

如果想直接用myCafe.milkshakes[0]获取字符串口味,同时还能访问price属性,可以用Proxy包装元素:

class Cafe {
  constructor(menu) {
    this.iceCreams = menu[0];
    this.milkshakes = menu[1].map((flavor, n) => {
      const price = (n + 1) * 5;
      // 创建代理,访问元素本身返回字符串,访问price返回计算值
      return new Proxy(flavor, {
        get(target, prop) {
          if (prop === 'price') {
            return price;
          }
          return target[prop];
        }
      });
    });
  }
}

// 使用示例
const myCafe = new Cafe(menu);
console.log(myCafe.milkshakes[0]); // 输出 "vanilla"
console.log(myCafe.milkshakes[0].price); // 输出 5

关键提醒

JS里的字符串是原始值,直接给它加属性的话,JS会临时生成包装对象,但这个对象不会被保留,下次访问字符串时会重新创建新的包装对象,之前加的属性会丢失,所以不推荐直接给字符串加属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:15:14