计算SVG/string中的所有十六进制颜色代码
Count all hex colour codes in SVG/string
我有一个SVG图像,我想获得数组中的所有颜色十六进制代码。
<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g display="inline">
<title>Layer 1</title>
<ellipse ry="116" rx="66" id="svg_1" cy="130.7" cx="375.2" stroke-width="3" stroke="#000000" fill="#FF0000"/>
<ellipse ry="104" rx="68" id="svg_2" cy="133.7" cx="248.2" stroke-width="3" stroke="#000000" fill="#FF0000"/>
<ellipse ry="73" rx="47" id="svg_3" cy="161.7" cx="231.2" stroke-width="3" stroke="#000000" fill="#FF0000"/>
<rect id="svg_4" height="77" width="83" y="66.7" x="225.2" stroke-width="3" stroke="#000000" fill="#0000ff"/>
</g>
</svg>
所以在这种情况下,我有三种不同的颜色。然而,由于复发,我总共有8个。
我可以数数。
function count_colours(data){
return data.match(/#/g).length;
}
很明显,我得到了8加上任何其他出现的#。
我的问题是,我能想到的任何事情都太沉重了。如果有的话,我需要一个简单的解决方案。有没有一种简单的方法可以实现这一点?在一个数组中获得所有的十六进制代码而不重复将是惊人的。
编辑:好的,所以遍历数组并使用..检查十六进制代码是否有效。。
var isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test('#XXXXX')
然后使用删除重复项
_.uniq(hex_codes);
但我该如何构建初始数组,这是我正在努力解决的问题。我会在初始迭代中使用indexOf()吗。这一切看起来很混乱。
这个怎么样?
function count_colours(data) {
var n = 0, matches, cols = {};
if (matches = data.match(/'#[0-9A-Fa-f]{3}([0-9A-Fa-f]{3})?/g)) {
for (var i=0; i<matches.length; i++) {
if (!cols[matches[i]]) {
cols[matches[i]] = 1
n++;
}
}
}
return n;
}
在这里演示
您可能还需要考虑"#00F"、"#00F"answers"#0000FF"都是相同的颜色,但将分别计算。我在这里假设这些文件是由一个编辑器或类似的东西产生的,它在列出颜色的方式上是一致的。
是的,这取决于您的限制。
我会选择下划线实用函数uniq,因为它不值得编写自己的实现。
http://underscorejs.org/#uniq
关于你的问题,这里还有另一个答案:使用Undercore for Javascript 删除重复对象
相关文章:
- 如何检查十六进制颜色是否为“”;太黑”;
- javascript:搜索并用不同的颜色代码替换十六进制颜色代码
- html5画布支持带alpha的十六进制颜色吗
- 以递增的渐变对十六进制颜色代码进行排序
- 如何将透明度信息添加到十六进制颜色代码
- 如何在 jquery 颜色选择器中设置数字十六进制颜色
- 有没有一行 javascript 可以将每个十六进制颜色更改为不同的十六进制颜色
- Regexp匹配十六进制颜色语法(和缩写形式)
- Javascript解析页面以查找十六进制颜色值
- 如何在Javascript中用十六进制颜色为字符串着色
- 使用javascript匹配功能捕获十六进制颜色代码
- 将随机字符串转换为十六进制颜色
- 将数组十六进制颜色转换为数组rgb颜色
- 将十六进制颜色传递到函数时,firefox中存在非法字符
- 在Javascript Regex中,如何验证字符串是否为有效的十六进制颜色
- 根据十六进制颜色获取最接近的颜色名称
- 生成一个随机的种子十六进制颜色
- 将照度转换为十六进制颜色
- 使十六进制颜色变亮或变暗
- 十六进制颜色码的按位补码总是返回6个字符吗?