首页 > 解决方案 > 从 RGB 值表中获取 9 个最常见的 RBG 值

问题描述

快速提问。

我有一张这样的桌子:

[
  [ 86, 81, 89 ],    [ 86, 81, 89 ],    [ 86, 81, 89 ],    [ 83, 78, 84 ],
  [ 86, 81, 89 ],    [ 83, 78, 84 ],    [ 86, 81, 89 ],    [ 86, 81, 89 ],
  [ 83, 78, 84 ],    [ 83, 78, 84 ],    [ 80, 74, 80 ],    [ 76, 69, 76 ],
  [ 76, 69, 76 ],    [ 76, 69, 76 ],    [ 73, 65, 71 ],    [ 67, 63, 70 ],
  [ 67, 63, 70 ],    [ 68, 60, 64 ],    [ 66, 56, 58 ],    [ 57, 51, 59 ],
  [ 66, 56, 58 ],    [ 66, 56, 58 ],    [ 68, 60, 64 ],    [ 68, 60, 64 ],
  [ 68, 60, 64 ],    [ 67, 63, 70 ],    [ 73, 65, 71 ],    [ 76, 69, 76 ],
  [ 76, 69, 76 ],    [ 76, 69, 76 ],    [ 76, 69, 76 ],    [ 73, 65, 71 ],
  [ 73, 65, 71 ],    [ 68, 60, 64 ],    [ 68, 60, 64 ],    [ 68, 60, 64 ],
  [ 66, 56, 58 ],    [ 57, 51, 59 ],    [ 63, 52, 51 ],    [ 63, 52, 51 ],
  [ 56, 47, 48 ],    [ 56, 47, 48 ],    [ 57, 51, 59 ],    [ 63, 52, 51 ],
  [ 57, 51, 59 ],    [ 66, 56, 58 ],    [ 66, 56, 58 ],    [ 68, 60, 64 ],
  [ 66, 56, 58 ],    [ 57, 51, 59 ],    [ 66, 56, 58 ],    [ 68, 60, 64 ],
  [ 67, 63, 70 ],    [ 76, 69, 76 ],    [ 83, 78, 84 ],    [ 86, 81, 89 ],
  [ 86, 81, 89 ],    [ 93, 87, 96 ],    [ 100, 96, 105 ],  [ 109, 104, 108 ],
  [ 115, 108, 112 ], [ 119, 114, 120 ], [ 128, 122, 125 ], [ 134, 130, 137 ],
  [ 134, 130, 137 ], [ 127, 125, 135 ], [ 134, 130, 137 ], [ 134, 130, 137 ],
  [ 134, 130, 137 ], [ 134, 130, 137 ], [ 134, 130, 137 ], [ 134, 130, 137 ],
  [ 134, 130, 137 ], [ 134, 130, 137 ], [ 134, 130, 137 ], [ 135, 133, 143 ],
  [ 143, 140, 145 ], [ 146, 143, 149 ], [ 149, 146, 152 ], [ 149, 146, 152 ],
  [ 149, 146, 152 ], [ 152, 145, 147 ], [ 149, 146, 152 ], [ 149, 143, 144 ],
  [ 146, 143, 149 ], [ 143, 140, 145 ], [ 143, 140, 145 ], [ 141, 137, 141 ],
  [ 149, 146, 152 ], [ 157, 151, 154 ], [ 162, 160, 165 ], [ 168, 166, 171 ],
  [ 174, 169, 172 ], [ 174, 169, 172 ], [ 168, 166, 171 ], [ 169, 164, 165 ],
  [ 166, 160, 161 ], [ 160, 154, 155 ], [ 155, 148, 149 ], [ 149, 143, 144 ],
  ... 50525 more items
]

我如何在该表中获得 9 个最常见的 RGB 值?

提前致谢。

标签: node.js

解决方案


这是一种方法。您需要在这里使用自己的完整数组。我只使用了您提供的值。我也不只返回 9 个最常见的 rgb 值,而是按从最常见到最不常见的顺序返回所有这些值,因此您必须从 sortableRankings-array 中获取前 9 个元素才能准确获得 9 个最常见的 rgb。

const rgbs = [
    [ 86, 81, 89 ],    [ 86, 81, 89 ],    [ 86, 81, 89 ],    [ 83, 78, 84 ],
    [ 86, 81, 89 ],    [ 83, 78, 84 ],    [ 86, 81, 89 ],    [ 86, 81, 89 ],
    [ 83, 78, 84 ],    [ 83, 78, 84 ],    [ 80, 74, 80 ],    [ 76, 69, 76 ],
    [ 76, 69, 76 ],    [ 76, 69, 76 ],    [ 73, 65, 71 ],    [ 67, 63, 70 ],
    [ 67, 63, 70 ],    [ 68, 60, 64 ],    [ 66, 56, 58 ],    [ 57, 51, 59 ],
    [ 66, 56, 58 ],    [ 66, 56, 58 ],    [ 68, 60, 64 ],    [ 68, 60, 64 ],
    [ 68, 60, 64 ],    [ 67, 63, 70 ],    [ 73, 65, 71 ],    [ 76, 69, 76 ],
    [ 76, 69, 76 ],    [ 76, 69, 76 ],    [ 76, 69, 76 ],    [ 73, 65, 71 ],
    [ 73, 65, 71 ],    [ 68, 60, 64 ],    [ 68, 60, 64 ],    [ 68, 60, 64 ],
    [ 66, 56, 58 ],    [ 57, 51, 59 ],    [ 63, 52, 51 ],    [ 63, 52, 51 ],
    [ 56, 47, 48 ],    [ 56, 47, 48 ],    [ 57, 51, 59 ],    [ 63, 52, 51 ],
    [ 57, 51, 59 ],    [ 66, 56, 58 ],    [ 66, 56, 58 ],    [ 68, 60, 64 ],
    [ 66, 56, 58 ],    [ 57, 51, 59 ],    [ 66, 56, 58 ],    [ 68, 60, 64 ],
    [ 67, 63, 70 ],    [ 76, 69, 76 ],    [ 83, 78, 84 ],    [ 86, 81, 89 ],
    [ 86, 81, 89 ],    [ 93, 87, 96 ],    [ 100, 96, 105 ],  [ 109, 104, 108 ],
    [ 115, 108, 112 ], [ 119, 114, 120 ], [ 128, 122, 125 ], [ 134, 130, 137 ],
    [ 134, 130, 137 ], [ 127, 125, 135 ], [ 134, 130, 137 ], [ 134, 130, 137 ],
    [ 134, 130, 137 ], [ 134, 130, 137 ], [ 134, 130, 137 ], [ 134, 130, 137 ],
    [ 134, 130, 137 ], [ 134, 130, 137 ], [ 134, 130, 137 ], [ 135, 133, 143 ],
    [ 143, 140, 145 ], [ 146, 143, 149 ], [ 149, 146, 152 ], [ 149, 146, 152 ],
    [ 149, 146, 152 ], [ 152, 145, 147 ], [ 149, 146, 152 ], [ 149, 143, 144 ],
    [ 146, 143, 149 ], [ 143, 140, 145 ], [ 143, 140, 145 ], [ 141, 137, 141 ],
    [ 149, 146, 152 ], [ 157, 151, 154 ], [ 162, 160, 165 ], [ 168, 166, 171 ],
    [ 174, 169, 172 ], [ 174, 169, 172 ], [ 168, 166, 171 ], [ 169, 164, 165 ],
    [ 166, 160, 161 ], [ 160, 154, 155 ], [ 155, 148, 149 ], [ 149, 143, 144 ]
  ]

  // Something to save the rankings in
  const rankings = {};

  // Loop through the rgb values
  for(let i = 0; i < rgbs.length; i++)
  {
      const rgb = rgbs[i];
      const rgbString = rgb.join(','); // Make a "key" from the rgb triplet
      
      // Store the ranking, or increment it by one if it already exists
      if(!(rgbString in rankings))
          rankings[rgbString] = 1;
      else
          rankings[rgbString]++;
  }

  // Can't easily sort rankings object and we need to use an object in the previous step to easily find existing rgb rankings by key,
  // So now turn that object into an array which we can sort by the ranking
  const sortableRankings = [];

  for(let ranking in rankings)
  {
      sortableRankings.push([ranking, rankings[ranking]]);
  }


  // Sort by ranking from highest to lowest and log it out
  console.log(sortableRankings.sort((a, b) => b[1] - a[1]));

推荐阅读