Files
get-colors-from-beans/example-usage.ts
2026-01-06 03:52:42 +08:00

175 lines
4.9 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import colors from './get-colors.json';
// 示例1显示所有颜色集合的统计信息
console.log('=== 颜色集合统计 ===\n');
const stats = Object.entries(colors).map(([setName, colorList]) => ({
name: setName,
count: colorList.length
}));
// 按颜色数量排序
stats.sort((a, b) => b.count - a.count);
console.log('颜色集合列表(按数量排序):');
stats.slice(0, 10).forEach(stat => {
console.log(` ${stat.name}: ${stat.count}`);
});
console.log(` ... (共 ${stats.length} 个集合)\n`);
// 总计
const totalColors = stats.reduce((sum, stat) => sum + stat.count, 0);
console.log(`总计: ${totalColors} 个颜色\n`);
// 示例2查找特定颜色
console.log('=== 查找颜色示例 ===\n');
function findColorByHex(hexColor: string): Array<{brand: string, colorName: string}> {
const results: Array<{brand: string, colorName: string}> = [];
Object.entries(colors).forEach(([setName, colorList]) => {
const found = colorList.find(c => c.color.toLowerCase() === hexColor.toLowerCase());
if (found) {
results.push({
brand: setName,
colorName: found['color-name']
});
}
});
return results;
}
const white = findColorByHex('#FFFFFF');
console.log(`白色 (#FFFFFF) 在以下集合中出现:`);
white.forEach(item => {
console.log(` - ${item.brand}: ${item.colorName}`);
});
console.log('');
const black = findColorByHex('#000000');
console.log(`黑色 (#000000) 在以下集合中出现:`);
black.forEach(item => {
console.log(` - ${item.brand}: ${item.colorName}`);
});
console.log('');
// 示例3获取特定品牌的颜色
console.log('=== 特定品牌颜色示例 ===\n');
const dmcColors = colors['DMC十字绣实色 - 色号预览508色'];
console.log(`DMC十字绣实色共有 ${dmcColors.length} 个颜色`);
console.log('前10个颜色:');
dmcColors.slice(0, 10).forEach((color, index) => {
console.log(` ${index + 1}. ${color['color-name']}: ${color.color}`);
});
console.log('');
// 示例4颜色去重和统计
console.log('=== 颜色去重统计 ===\n');
function getAllUniqueColors() {
const uniqueColors = new Map<string, number>();
Object.values(colors).forEach(colorList => {
colorList.forEach(color => {
const hex = color.color;
uniqueColors.set(hex, (uniqueColors.get(hex) || 0) + 1);
});
});
return uniqueColors;
}
const uniqueColors = getAllUniqueColors();
console.log(`唯一颜色数量: ${uniqueColors.size}`);
// 找出最常见的颜色(在多个品牌中出现的)
const commonColors = Array.from(uniqueColors.entries())
.filter(([hex, count]) => count > 5)
.sort((a, b) => b[1] - a[1])
.slice(0, 10);
console.log('\n最常见的颜色出现在6个以上品牌中');
commonColors.forEach(([hex, count]) => {
console.log(` ${hex}: 出现在 ${count} 个品牌中`);
});
console.log('');
// 示例5颜色搜索功能
console.log('=== 颜色搜索功能 ===\n');
function searchColors(keyword: string, limit: number = 5): Array<{brand: string, color: any}> {
const results: Array<{brand: string, color: any}> = [];
Object.entries(colors).forEach(([setName, colorList]) => {
const matches = colorList.filter(c =>
c['color-name'].toLowerCase().includes(keyword.toLowerCase())
);
matches.forEach(match => {
if (results.length < limit) {
results.push({
brand: setName,
color: match
});
}
});
});
return results;
}
const searchA = searchColors('A1', 10);
console.log('搜索包含 "A1" 的色号前10个');
searchA.forEach(item => {
console.log(` ${item.brand}: ${item.color['color-name']} = ${item.color.color}`);
});
console.log('');
// 示例6颜色分组统计按颜色范围
console.log('=== 颜色范围统计 ===\n');
function getColorRange(hex: string): string {
const r = parseInt(hex.slice(1, 3), 16);
const g = parseInt(hex.slice(3, 5), 16);
const b = parseInt(hex.slice(5, 7), 16);
const max = Math.max(r, g, b);
const min = Math.min(r, g, b);
if (max - min < 30) {
if (max < 50) return '黑色系';
if (max > 200) return '白色系';
return '灰色系';
}
if (r > g && r > b) return '红色系';
if (g > r && g > b) return '绿色系';
if (b > r && b > g) return '蓝色系';
if (r > 200 && g > 200 && b < 100) return '黄色系';
if (r > 200 && b > 200 && g < 100) return '紫色系';
if (g > 200 && b > 200 && r < 100) return '青色系';
return '其他';
}
const rangeStats = new Map<string, number>();
Object.values(colors).forEach(colorList => {
colorList.forEach(color => {
const range = getColorRange(color.color);
rangeStats.set(range, (rangeStats.get(range) || 0) + 1);
});
});
console.log('颜色范围分布:');
Array.from(rangeStats.entries())
.sort((a, b) => b[1] - a[1])
.forEach(([range, count]) => {
console.log(` ${range}: ${count}`);
});
console.log('');
console.log('=== 示例运行完成 ===');