我有来自服务器的字符串:
//A
123|155-244
- 第一个数字总是表示“红色”
|
后面的数字总是表示“绿色”之后的数字-
始终表示“蓝色”
这里的问题是绿色和蓝色可以按任意顺序返回:
//B
123-244|155
或者它们可能完全缺失:
//C
123|155
我需要一个返回一个数组/对象的函数来简化事情:
//A
var result = {red:"123", green:"155", blue:"244"}
//B
var result = {red:"123", green:"155", blue:"244"}
//C
var result = {red:"123", green:"155", blue:"0"}
我尝试了两个函数,一个用于获取绿色,另一个用于获取蓝色,但我意识到这不能正常工作,具体取决于它们在字符串中出现的顺序。
var getGreen = function(myvar){
return myvar.split('-');
};
var getBlue = function(myvar){
return myvar.split('|');
};
这样做有时会使我的对象看起来像这样:
var result = {red:"123", green:"155", blue:"244|155"}
我应该如何进行?
最佳答案
不需要正则表达式:
parse = function(s) {
return {
red: parseInt('+' + s, 10) || 0,
green: parseInt(s.split('|')[1], 10) || 0,
blue: parseInt(s.split('-')[1], 10) || 0,
};
};
//
test = [
'123',
'222|333-444',
'55-66|77',
'123|456',
'123-456',
'|123-456',
'-123|456',
'010|020-030',
];
test.map(parse).forEach(r =>
document.write('<pre>' + JSON.stringify(r) + '</pre>'));
这利用了 parseInt
在第一个不可解析的字符处停止并在给定垃圾时返回假值的事实。 '+' + s
hack 是为了使前导破折号无效(否则会被误认为是减号)。
关于javascript - 字符串拆分为 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35428347/