首页 > 其他分享 >js动态构建属性名并访问其对象属性(动态的对象或着数组名)

js动态构建属性名并访问其对象属性(动态的对象或着数组名)

时间:2024-08-05 10:43:47浏览次数:13  
标签:const 属性 colorMap rgb 数组名 fff 动态 range 255

js动态构建属性名并访问其对象属性(动态属性访问)

在开发中有时会遇到这种情况:你写了很多的函数,写完发现他们的操作逻辑都是相同的,但是原始数据不同,如:

    /* 获取 区域,道路 拥堵指数对应的色标 */
    makeCongestionColor(num) {
        let outColor = '#fff'
        let colorMap = {
            '[-10000, 0]': '#fff',
            '[0, 2]': 'rgb(0, 128, 0)',
            '[2, 4]': 'rgb(153, 204, 0)',
            '[4, 6]': 'rgb(255, 255, 0)',
            '[6, 8]': 'rgb(255, 153, 0)',
            '[8, 10000]': 'rgb(255, 0, 0)'
        }
        for (const [range, color] of Object.entries(colorMap)) {
            const [start, end] = JSON.parse(range)
            if (start <= parseFloat(num) && parseFloat(num) < end) {
                outColor = color
            }
        }
        return outColor
    },
        
        
	/* 获取延时指数TTI对应的色标 */
    makeTtiColor(num) {
        let outColor = '#fff'
        let colorMap = {
            '[-10000, 1]': '#fff',
            '[1, 1.3]': 'rgb(0, 128, 0)',
            '[1.3, 1.6]': 'rgb(153, 204, 0)',
            '[1.6, 1.9]': 'rgb(255, 255, 0)',
            '[1.9, 2.2]': 'rgb(255, 153, 0)',
            '[2.2, 10000]': 'rgb(255, 0, 0)'
        }
        for (const [range, color] of Object.entries(colorMap)) {
            const [start, end] = JSON.parse(range)
            if (start <= parseFloat(num) && parseFloat(num) < end) {
                outColor = color
            }
        }
        return outColor
    },

为此我们需要改造一下这个函数:将colorMap的数据从外部传入:如:

makeTtiColor(num, colorMap) {
        let outColor = '#fff'
        for (const [range, color] of Object.entries(colorMap)) {
            const [start, end] = JSON.parse(range)
            if (start <= parseFloat(num) && parseFloat(num) < end) {
                outColor = color
            }
        }
        return outColor
    },

但是改造完成之后你会发现每次使用这个函数的时候就会很繁琐,colorMap就重复写了很多次,为此我们可以直接将colorMap在methods文件中定义好,然后在模板页面中直接传入类型即可。如:

src/mixin/calculationIndicators.js

// 我是在mixin中定义的,如果是别的js文件中使用方法也是大相径庭的
export const calculationIndicators = {
  data() {
    return {
      congestionColorMap: {
        '[-10000, 0]': '#fff',
        '[0, 2]': 'rgb(0, 128, 0)',
        '[2, 4]': 'rgb(153, 204, 0)',
        '[4, 6]': 'rgb(255, 255, 0)',
        '[6, 8]': 'rgb(255, 153, 0)',
        '[8, 10000]': 'rgb(255, 0, 0)'
      },

      ttiColorMap: {
        '[-10000, 1]': '#fff',
        '[1, 1.3]': 'rgb(0, 128, 0)',
        '[1.3, 1.6]': 'rgb(153, 204, 0)',
        '[1.6, 1.9]': 'rgb(255, 255, 0)',
        '[1.9, 2.2]': 'rgb(255, 153, 0)',
        '[2.2, 10000]': 'rgb(255, 0, 0)'
      },

      aArr: [1, 2, 3],
      bArr: [4, 5, 6]
    }
  },
  methods: {
    /**
     * @Event 获取 路段、区域,道路 拥堵指数对应的色标
     * @param num: 指数的数据
     * @param type: 类型(tti 还是 拥堵指数[congestion])
     * @description:
     * @author: mhf
     * @time: 2024-01-08 11:11:01
     **/
    makeColor(num, type) {
      console.log(this[`${type}ColorMap`], "this[`${type}ColorMap`]")
      let outColor = '#fff'
      for (const [range, color] of Object.entries(this[`${type}ColorMap`])) {
        const [start, end] = JSON.parse(range)
        if (start <= parseFloat(num) && parseFloat(num) < end) {
          outColor = color
        }
      }
      return outColor
    },

    getArr(type) {
      console.log(this[`${type}Arr`], "this[`${type}Arr`]")
      return this[`${type}Arr`]
    }
  }
}

使用如下:

xxx.vue文件
import { calculationIndicators } from '@/mixin/calculationIndicators'
export default {
    mixins: [calculationIndicators],
    created() {
        this.makeColor(2.2, "congestion")
        this.getArr('b')
    },
}

标签:const,属性,colorMap,rgb,数组名,fff,动态,range,255
From: https://www.cnblogs.com/ProgrammerMao-001/p/18342766

相关文章

  • 静态代理与动态代理区别?
    静态代理和动态代理是Java中常用的两种代理模式,用于为目标对象提供额外的功能。以下是它们的主要区别:静态代理代理类在编译时确定:静态代理类在编译时就已经存在,并且需要手动编写。代理类和目标类实现相同的接口:代理类和被代理的目标类都需要实现相同的接口。实现较......
  • 动态规划,蒙特卡洛,TD,Qlearing,Sars,DQN,REINFORCE算法对比
    动态规划(DynamicProgramming,DP)通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划的步骤识别子问题:定义问题的递归解法,识别状态和选择。确定DP数组:确定存储子问题解的数据结构,通常是数组或矩阵。确定状态转移方程:找出状态之间的关系,即状态转移方程。......
  • vue filter 只能用于插值语法中吗,属性绑定可以用 filter 吗
    Vue过滤器不仅可以用于插值语法中,也可以用于属性绑定中。具体来说:插值语法中使用过滤器:过滤器可以用在双花括号插值中[1][5]。例如:{{message|capitalize}}属性绑定中使用过滤器:从Vue2.1.0版本开始,过滤器也可以用在v-bind表达式中[1][5]。例如:<divv-bi......
  • Day 32 动态规划 Part01
    动态规划解题步骤确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组509.斐波那契数显然dp[i]代表fib[i],fib[i]=fib[i-1]+fib[i-2],fib[0]=0,fib[1]=1,遍历从前往后遍历即可。下面的代码优化了空间复杂度,但思路是一致的。......
  • vue 组件透传所有属性—useAttrs
    vue组件透传所有属性——useAttrs引言在对某些基础组件进行封装的时候,可能无法通过props将所有可能的属性都声明了,这时候就可以使用useAttrs,拿到不通过props声明的属性<scriptlang="ts">import{defineComponent,computed}from'vue'import{useAttrs}from'v......
  • 解密动态规划:简单易懂的方法和分类大揭秘
    动态规划是一种解决问题的算法思想,它通过将问题划分成多个子问题并进行递推求解,从而得到最优解。以下是简单易懂的动态规划方法以及动态规划的分类:简单易懂的动态规划方法:确定状态:分析问题,找出问题的关键参数,并将其抽象为状态。确定状态转移方程:确定状态之间的关系,即如何从......
  • 使用 addRouteMiddleware 动态添加中间
    title:使用addRouteMiddleware动态添加中间date:2024/8/4updated:2024/8/4author:cmdragonexcerpt:摘要:文章介绍了Nuxt3中addRouteMiddleware的使用方法,该功能允许开发者动态添加路由中间件,以实现诸如权限检查、动态重定向及路由变化时的特定操作。内容涵盖路由中间......
  • c动态加载c/c++ so并调用其中的函数或者子类实现
    在不少服务器应用中,会采用插件化或者模块化的体系实现具体的业务功能,比如mysql支持插件化体系,nginx采用模块化体系。总得来说,很多时候,因为扩展性,系统会采用动态加载so的方式扩展业务功能,而主框架不需要每次新增功能就不得不重新编译,很多时候,对于二进制发行的应用来说,不可能这......
  • 动态规划与搜索练习
    这是我搜集到的一些动态规划和搜索的练习题搜索小练习动态规划小练习祝你CSP拿到\(^{一等奖}_{一等奖}\)!这是解析动态规划一、双子序列最大和由于两个子序列不重叠,显然的这两个子序列之间一定有一个断点。要求两个子序列之和最大值,可以枚举断点的位置,对比每个断点下左序......
  • C语言:动态内存管理
    动态内存管理一、动态分配内存的必要性普通内存分配动态内存分配二、动态内存分配函数(一)malloc(二)calloc(三)realloc(四)free三、常见的错误(一)对空指针进行解引用操作(二)对动态分配空间越界访问(三)free释放动态分配空间的一部分(四)动态开辟内存忘记释放四、柔性数组(一)柔性数组......