【问题标题】:Why is my console.log(variable) showing two differently values?为什么我的 console.log(variable) 显示两个不同的值?
【发布时间】:2019-05-02 14:55:57
【问题描述】:

我正在做算法。设置两个 rgb 颜色之间的距离,却返回错误的值,为什么?

  let tests = [[128, 0, 0], [170, 110, 40], [128, 128, 0], [0, 128, 128], [0, 0, 128],
    [0, 0, 0], [230, 25, 75], [245, 130, 48], [255, 225, 25], [210, 245, 60], [60, 180, 75],
    [70, 240, 240], [0, 130, 200], [145, 30, 180], [240, 50, 230], [128, 128, 128], [250, 190, 190],
    [255, 215, 180], [255, 250, 200], [170, 255, 195], [230, 190, 255], [255, 255, 255]]
  let corFinal = [0, 0, 0]
  let coresFinais = []
  let menorDist = 256
  getPaletteFromURL(this.imageTest, 8, 1).then((response) => {
    console.log('array de cores', response)
    response.forEach((color) => {
      tests.forEach((test) => {
        let dist = Math.sqrt(Math.pow(test[0] - color[0], 2) + Math.pow(test[1] - color[1], 2) + Math.pow(test[2] - color[2], 2))
        if (dist < menorDist) {
          menorDist = dist
          corFinal[0] = test[0]
          corFinal[1] = test[1]
          corFinal[2] = test[2]
          console.log(corFinal)
        }
      })
      console.log(corFinal)
      menorDist = 256
      coresFinais.push(corFinal)
    })
    console.log('array final', coresFinais)
  })

Response 是一个与“tests”风格相同的数组

运行 console.log(test[0]) 确实显示了正确的值。 console.log(corFinal) 确实显示了两个值

【问题讨论】:

  • 同一数组corFinal 正在更新并在每个循环中推送到coresFinais。在forEach中声明它
  • 其实,我只想走一小段路。所以它在循环之后

标签: javascript arrays browser console


【解决方案1】:

实际上,错误是我正在逐个字段更新数组(我不知道为什么返回错误值)。

所以我改成:

corFinal = test

然后代码起作用了。

【讨论】:

  • 它没有返回错误的值。 coresFinais 的每个索引都指向同一个 corFinal 引用。如果您像使用corFinal[0] = 一样更新它,它将更新coresFinais 数组的所有索引。此答案将起作用,因为您正在重新分配corFinal。现在它不再引用原始数组了
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
相关资源
最近更新 更多