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

JS:如何将列表项转为小写并以此获取对象键值?

问题与解决方案

问题描述

现有设备列表、实体列表及多个实体配置对象,需要通过实体列表中首字母大写的项,匹配对应小写命名的配置对象并获取其键值。原代码如下:

let devices = ['001A2208B97D','001A2208C9FA','001A2214ADC8','001A2214A73A','001A2214B86E','001A2214A6DF','001A2214ADBF','001A2208CFD3']
let entities = ['Temperature', 'Valve', 'Battery', 'Offset']
let temperature = { device_class: 'temperature', icon: "hass:thermometer-bluetooth", unit: "°C"}
let valve = { device_class: '', icon: "hass:valve", unit: "%"}
let battery = { device_class: 'battery', icon: "hass:battery-bluetooth", unit: ""}
let offset = { device_class: '', icon: "hass:offset", unit: "°C" }

for (let i = 0; i < devices.length; i++) {
    for (let j = 0; j < entities.length; j++) {
        msg.payload = {
            "icon": temperature['icon'],
            "unit_of_measurement": temperature['unit'],
            "state_class": "measurement",
        }
    }
}

需求:无需预创建小写实体映射集合,用一行式写法实现将实体列表项转为小写后,匹配对应配置对象并获取属性。此前尝试entities[0].toLowerCase()['unit']写法失败,寻求可行方案。

解决方案

可以利用globalThis(通用JavaScript环境的全局对象)来动态访问全局作用域中的配置对象,实现一行式匹配:

循环内动态获取配置的完整写法

for (let i = 0; i < devices.length; i++) {
    for (let j = 0; j < entities.length; j++) {
        // 一行完成实体名转小写 + 获取对应配置对象
        const entityConfig = globalThis[entities[j].toLowerCase()];
        msg.payload = {
            "icon": entityConfig.icon,
            "unit_of_measurement": entityConfig.unit,
            "state_class": "measurement",
        }
    }
}

直接获取单个属性的一行式写法

// 示例:获取第一个实体的unit属性
const firstEntityUnit = globalThis[entities[0].toLowerCase()].unit;

说明

  • globalThis是ES2020标准引入的全局对象,可在浏览器、Node.js等所有JavaScript环境中统一访问全局变量,替代浏览器的window和Node.js的global。
  • 将实体名称转小写后作为globalThis的键,即可直接拿到对应的配置对象,无需额外创建映射集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:36:15