JavaScript | Ближайший цвет js
   
  
 
         
         
     Тема закрыта by 
 mrDima
 mrDima      
Причина: Не нуждается в дополнении
 
 
 
  
 mrDima
 mrDima      
Причина: Не нуждается в дополнении
 
  
  
    
  
    Есть json массив с цветами в rgb, и их названиями (пример):
Также рандомный цвет:
Нужно определять ближайший к нему за схожестью цвет из массива, и называть его
________
посл. ред. 11.11.2022 в 12:23; всего 3 раз(а); by mrDima
  
 
 
 
javascript
var  palette = [
	{
		"color": [255, 0, 0],
		"name": "red"
	},
	{	
		"color": [0, 255, 0],
		"name": "green"
	},
	{
		"color": [0, 0, 255],
		"name": "blue"
	}
]Также рандомный цвет:
javascript
var color = [167, 10, 23]Нужно определять ближайший к нему за схожестью цвет из массива, и называть его
________
посл. ред. 11.11.2022 в 12:23; всего 3 раз(а); by mrDima
 
  
  
    
  
    Теоретически можно так попробовать:
для 167,10,23 выведет "red"
  
 
 
 
  
 
 
 
javascript
const rgbSum = (rgbArray) => rgbArray.reduce((pval, cval) => pval + cval, 0)
const compareColor = (palette, color) => {
  const colorSum = rgbSum(color)
  let best = 0
  let bestEl = null
  palette.forEach(el => {
    const elSum = rgbSum(el.color) - colorSum
    if(elSum < best || bestEl === null) {
      best = elSum
      bestEl = el
    }
  })
  return bestEl
}
const palette = [
	 	{
	 		"color": [255, 0, 0],
	 		"name": "red"
	 	},
	 	{	
	 		"color": [0, 255, 0],
	 		"name": "green"
	 	},
	 	{
	 		"color": [0, 0, 255],
	 		"name": "blue"
	 	}
]
const color = [167, 10, 23]
console.log(compareColor(palette, color).name)для 167,10,23 выведет "red"
 mrDima , и вправду, голова уже туго сображает, поправил:
 mrDima , и вправду, голова уже туго сображает, поправил:javascript
const scoreSum = scoreArray => scoreArray.reduce((pval, cval) => pval + cval, 0)
const compareColor = (palette, color) => {
	   let score = 0;
	   let bestEl = null
	   palette.forEach(el => {
	     const curScoreArray = [
        Math.abs(el.color[0] - color[0]),
        Math.abs(el.color[1] - color[1]),
        Math.abs(el.color[2] - color[2])
	     ]
       const curScore = scoreSum(curScoreArray)
       if(curScore < score || bestEl === null) {
	       score = curScore
	       bestEl = el
	     }
	   })
	   return bestEl
}
	 
const palette = [
	 	 	{
	 	 		"color": [255, 0, 0],
	 	 		"name": "red"
	 	 	},
	 	 	{	
	 	 		"color": [0, 255, 0],
	 	 		"name": "green"
	 	 	},
	 	 	{
	 	 		"color": [0, 0, 255],
	 	 		"name": "blue"
	 	 	}
]
const color = [167, 255, 23]
console.log(compareColor(palette, color).name) )(aOS
 )(aOS  
		     
		    