Files
get-colors-from-beans/parse-db.ts
2026-01-06 04:16:17 +08:00

120 lines
3.2 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 { readFileSync, writeFileSync } from "fs";
import { dirname, join } from "path";
import { fileURLToPath } from "url";
interface ColorItem {
"color-name": string;
color: string;
}
interface ColorGroupItem {
"color-name": string;
"color-title": string;
color: string;
}
interface ColorMap {
[color: string]: ColorGroupItem[];
}
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
function parseColorsToMap(inputFile: string): ColorMap {
console.log(`读取文件: ${inputFile}`);
const jsonData = readFileSync(inputFile, "utf-8");
const inputData: { [key: string]: ColorItem[] } = JSON.parse(jsonData);
const colorMap: ColorMap = {};
let totalColors = 0;
let duplicateColors = 0;
for (const [colorTitle, colorList] of Object.entries(inputData)) {
console.log(`处理品牌: ${colorTitle} (${colorList.length} 个颜色)`);
for (const colorItem of colorList) {
const color = colorItem.color;
const colorName = colorItem["color-name"];
totalColors++;
if (!colorMap[color]) {
colorMap[color] = [];
} else {
duplicateColors++;
}
colorMap[color].push({
"color-name": colorName,
"color-title": colorTitle,
color: color
});
}
}
console.log(`\n统计信息:`);
console.log(` 处理的品牌数: ${Object.keys(inputData).length}`);
console.log(` 总颜色条目数: ${totalColors}`);
console.log(` 重复颜色数: ${duplicateColors}`);
console.log(` 唯一颜色数: ${Object.keys(colorMap).length}`);
return colorMap;
}
function writeColorMap(outputFile: string, colorMap: ColorMap): void {
console.log(`\n写入文件: ${outputFile}`);
writeFileSync(outputFile, JSON.stringify(colorMap, null, 2), "utf-8");
console.log(`✓ 文件已保存`);
}
function displaySampleData(colorMap: ColorMap): void {
console.log(`\n=== 示例数据 ===\n`);
const colorKeys = Object.keys(colorMap);
const sampleColor = colorKeys[0];
console.log(`颜色 ${sampleColor} 的引用数: ${colorMap[sampleColor].length}`);
console.log(`详细信息:`);
colorMap[sampleColor].forEach((item, index) => {
console.log(` ${index + 1}. 品牌: ${item["color-title"]}, 色号: ${item["color-name"]}`);
});
console.log(`\n=== 按引用数排序的颜色前10个===\n`);
const sortedColors = colorKeys
.map(color => ({
color,
count: colorMap[color].length
}))
.sort((a, b) => b.count - a.count)
.slice(0, 10);
sortedColors.forEach((item, index) => {
console.log(`${index + 1}. ${item.color}: ${item.count} 次引用`);
const brands = colorMap[item.color].map(c => c["color-title"]);
console.log(` 品牌: ${[...new Set(brands)].join(", ")}`);
});
}
function main() {
const inputFile = join(__dirname, "get-colors.json");
const outputFile = join(__dirname, "colorMap.json");
console.log("=== 颜色数据解析工具 ===\n");
try {
const colorMap = parseColorsToMap(inputFile);
writeColorMap(outputFile, colorMap);
displaySampleData(colorMap);
console.log(`\n=== 处理完成 ===`);
} catch (error) {
console.error(`\n✗ 错误:`, error);
process.exit(1);
}
}
main();