首页 > 解决方案 > 为什么代码根据语句顺序起作用

问题描述

forEach如果它有这个顺序,下面的工作:

series.forEach(s => {
        s.color = coloresNombres[s.name.toLowerCase()][0]
        s.name = coloresNombres[s.name.toLowerCase()][1]
})

但如果订单是:

series.forEach(s => {
        s.name = coloresNombres[s.name.toLowerCase()][1]
        s.color = coloresNombres[s.name.toLowerCase()][0]
})

问题是:为什么?


示例代码

let series = [
  {
    type: 'column',
    name: 'Destapado',
    data: [
      0, 0, 0, 0,
      0, 0, 0
    ]
  },
  {
    type: 'column',
    name: 'Guardado de carpa',
    data: [
      0, 0, 0, 0,
      0, 0, 0
    ]
  },
  {
    type: 'column',
    name: 'Presacado de carpa',
    data: [
      0, 3, 0, 0,
      0, 0, 0
    ]
  },
  {
    type: 'column',
    name: 'Retapado',
    data: [
      0, 0, 0, 0,
      0, 0, 0
    ]
  },
  {
    type: 'column',
    name: 'Tapado',
    data: [
      0, 0, 0, 0,
      0, 0, 0
    ]
  }
]

let coloresNombres = {
            'destapado': ['#ec7126', 'Destape'],
            'guardado de carpa': ['#fe9b38', 'Guardado'],
            'presacado de carpa': ['#003a81', 'Sacado'],
            'retapado': ['#2fb9d5', 'Retape'],
            'tapado': ['#00669e', 'Tapado']
        }
series.forEach(s => {
     s.name = coloresNombres[s.name.toLowerCase()][1]
     s.color = coloresNombres[s.name.toLowerCase()][0]
})

标签: javascript

解决方案


因为你正在改变s.name.

在“工作”示例中,s.name整个函数中的值相同,但在最后发生了更改:

series.forEach(s => {
    s.color = coloresNombres[s.name.toLowerCase()][0]
    s.name = coloresNombres[s.name.toLowerCase()][1]
})

但在“非工作”示例中,s.name在第一行更改,然后在第二行使用:

series.forEach(s => {
    s.name = coloresNombres[s.name.toLowerCase()][1]
    s.color = coloresNombres[s.name.toLowerCase()][0]
})

既然s.name有一个新值,s.name.toLowerCase()就有一个新值,那么coloresNombres[s.name.toLowerCase()]就会有一个新值,以此类推。


推荐阅读