Javascript 如何创建并递增2位或3位十六进制数?
如何从十六进制数数组中增加最高的十六进制数?我对己烯雌酚的了解有点参差不齐,因此,如有任何帮助,将不胜感激。老实说,我不知道这些数字是否是十六进制的,因为前面有一个“u”,但是如果你去掉“u”,它们看起来是这样的。这些值来自InDesign代码段文档 例如:Javascript 如何创建并递增2位或3位十六进制数?,javascript,actionscript-3,adobe-indesign,Javascript,Actionscript 3,Adobe Indesign,如何从十六进制数数组中增加最高的十六进制数?我对己烯雌酚的了解有点参差不齐,因此,如有任何帮助,将不胜感激。老实说,我不知道这些数字是否是十六进制的,因为前面有一个“u”,但是如果你去掉“u”,它们看起来是这样的。这些值来自InDesign代码段文档 例如: var anArray = ["uf9","ufc","u111","u112","u136","u137"]; // actual values var getUniqueID = getNextHigherNumber(anArray
var anArray = ["uf9","ufc","u111","u112","u136","u137"]; // actual values
var getUniqueID = getNextHigherNumber(anArray);
function getNextHigherNumber(anArray) {
// sort array
// create variable and add one
// return variable
return variable;
}
来自服务器的XML(查看Self和Source):
黑色
HyperlinkURLDestination/http%3a//test.com#1stMultilineLink/
黑色
HyperlinkURLDestination/http%3a//test.com
紫色
HyperlinkURLDestination/http%3a//google.com#MultileHyperlink
更多背景:
我有一个现有的XML文档,看起来它的ID使用了十六进制数字系统,我需要能够为新节点创建一个唯一的ID。ID值看起来类似于HTML web颜色,如“0xFF0000”(红色),但区别在于它使用2或3个字符,而不是6个字符,例如“ufc”或“u112”
我从服务器接收到一个XML文件,它有节点,每个节点都有一个ID和一个唯一的值(参见上面的XML示例)。如果我必须创建一个新的“项目”,我需要为它创建一个尚未使用的唯一ID 我认为你在思考十六进制时会把事情复杂化;)您只需将十六进制值转换为十进制值,然后继续执行您正在执行的操作,这样您就可以执行以下操作:
var anArray = ['u112', 'u136', 'uf9', 'u137', 'u111', 'ufc'];
var getUniqueID = getNextHigherNumber(anArray);
trace('u', getUniqueID); // gives : u138
function getNextHigherNumber(anArray:Array):String {
var max:int = 0;
for(var i:int = 0; i<anArray.length; i++){
// convert the hex value to an integer
var num:int = int('0x' + String(anArray[i]).substr(1));
// get the max value
if(num > max) max = num;
}
// return the hex value of (max value + 1)
return (max + 1).toString(16);
}
var anArray=['u112','u136','uf9','u137','u111','ufc'];
var getUniqueID=getNextHigherNumber(anArray);
跟踪('u',getUniqueID);//地址:u138
函数getNextHigherNumber(数组:数组):字符串{
var max:int=0;
对于(变量i:int=0;i max)max=num;
}
//返回的十六进制值(最大值+1)
返回(最大值+1)。toString(16);
}
希望这能有所帮助。我想你在考虑十六进制时会把事情弄复杂;)您只需将十六进制值转换为十进制值,然后继续执行您正在执行的操作,这样您就可以执行以下操作:
var anArray = ['u112', 'u136', 'uf9', 'u137', 'u111', 'ufc'];
var getUniqueID = getNextHigherNumber(anArray);
trace('u', getUniqueID); // gives : u138
function getNextHigherNumber(anArray:Array):String {
var max:int = 0;
for(var i:int = 0; i<anArray.length; i++){
// convert the hex value to an integer
var num:int = int('0x' + String(anArray[i]).substr(1));
// get the max value
if(num > max) max = num;
}
// return the hex value of (max value + 1)
return (max + 1).toString(16);
}
var anArray=['u112','u136','uf9','u137','u111','ufc'];
var getUniqueID=getNextHigherNumber(anArray);
跟踪('u',getUniqueID);//地址:u138
函数getNextHigherNumber(数组:数组):字符串{
var max:int=0;
对于(变量i:int=0;i max)max=num;
}
//返回的十六进制值(最大值+1)
返回(最大值+1)。toString(16);
}
希望能有所帮助。首先,十六进制只是一个数字的表示形式。 数字本身保持不变 加2意味着取这个数字的值,然后加上2的值。 十六进制只是记下数字的另一种方式 非常感谢您努力找出这些值是什么,但是为什么不检查文档以确定呢 您有一个通过InDesign接收的XML。 只要搜索它就会向我抛出“IDML”,这似乎是Adobe给您试图解析的格式起的名字 Adobe提供了描述此格式的文档: 第10.1.1节是关于自我属性的: Self属性包含一个元素的唯一标识符 控制住它。此标识符在IDML包中的其他位置用于 引用元素,如“对象引用”中所述 本规范的“格式”部分。模式示例2。 Self属性Self{xsd:string} 如您所见,该值是字符串,而不是数字 在第31页,您可以找到Adobe如何为Self创建值的说明,包括以下语句: Self属性值的唯一要求是 在IDML包中是唯一的。如果您自己编写IDML, 您不需要观察上述模式-您可以更改该值 你想要的任何东西的自我属性,只要它是独一无二的 (在IDML包中)并且只要对元素的所有引用 也将更改为匹配
首先,十六进制只是一个数字的表示。 数字本身保持不变 加2意味着取这个数字的值,然后加上2的值。 十六进制只是记下数字的另一种方式 非常感谢您努力找出这些值是什么,但是为什么不检查文档以确定呢 您有一个通过InDesign接收的XML。 只要搜索它就会向我抛出“IDML”,这似乎是Adobe给您试图解析的格式起的名字 Adobe提供了描述此格式的文档: 第10.1.1节是关于自我属性的: Self属性包含一个元素的唯一标识符 控制住它。此标识符在IDML包中的其他位置用于 引用元素,如“对象引用”中所述 本规范的“格式”部分。模式示例2。 Self属性Self{xsd:string} 如您所见,该值是字符串,而不是数字 在第31页,您可以找到Adobe如何为Self创建值的说明,包括以下语句: Self属性值的唯一要求是 在IDML包中是唯一的。如果您自己编写IDML, 您不需要观察上述模式-您可以更改该值 你想要的任何东西的自我属性,只要它是独一无二的 (在IDML包中)并且只要对元素的所有引用 也将更改为匹配
您标记了
JavaScript
和ActionScript
(我不知道ActionScript),但您问题中的代码在我看来像JavaScript,这里的另一个答案看起来像是ActionScript;所以
var anArray = ["uf9","ufc","u111","u112","u136","u137"];
function getNextHigherNumber(theArray) {
var maxNum = 0;
theArray.forEach(function(num) {
num = parseInt(num.substr(1), 16);
if(num > maxNum) maxNum = num;
});
return 'u' + (maxNum + 1).toString(16);
}
// Run the function to see if it works
console.log(getNextHigherNumber(anArray));