1 Вопрос: Почему мой console.log (переменная) показывает два разных значения?

вопрос создан в Thu, May 2, 2019 12:00 AM

 введите описание изображения здесь я делаю alg. установить расстояние между двумя колбами 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 - это массив массивов в том же стиле «тестов»

Запуск console.log (test [0]) показывает правильное значение. Console.log (corFinal) показывает ДВА ЗНАЧЕНИЯ

    
0
  1. Один и тот же массив corFinal обновляется и помещается в coresFinais в каждом цикле. Объявите это внутри forEach
    2019-05-02 14: 59: 43Z
  2. На самом деле, я хочу взять только небольшое расстояние. Так что после цикла
    2019-05-02 15: 08: 02Z
1 ответ                              1                         

На самом деле, ошибка была в том, что я обновлял массив массив за полем (что я не знаю, почему возвращал неправильные значения).

Поэтому я изменился на:

corFinal = test

Тогда код работал.

    
0
2019-05-02 15: 07: 32Z
  1. Он не возвращает неправильные значения. Каждый индекс coresFinais указывает на одну и ту же ссылку corFinal. Если вы обновите его, как вы делаете с corFinal[0] = , он обновит все индексы массива coresFinais. Этот ответ будет работать, потому что вы переназначаете corFinal. Теперь он больше не будет ссылаться на исходный массив
    2019-05-02 15: 08: 53Z
источник размещен Вот