NaN исходят из попытки преобразовать нечисловые значения в числа (т. Е. "#dfdfdf"
и "solid"
).Прежде чем пытаться преобразовать в числа, проверьте, является ли строка значения действительной или не использует isNaN
:
var value = singleArr[1]; // don't convert yet
if (obj[name] === undefined) {
obj[name] = isNaN(value)? value: +value; // if value is not a valid number, then keep it as it is (a string). Otherwise, convert it to a number (using unary + which is shorter than substracting 0)
}
Рабочий пример:
var str ="margin_top=5&margin_bottom=5&border_color=#dfdfdf&border_style=solid";
strToArray(str);
function strToArray(str){
str = str.replace(/\(|\)/g,'');
var arr = str.split('&');
var obj = {};
for (var i = 0; i < arr.length; i++) {
var singleArr = arr[i].trim().split('=');
var name = singleArr[0];
var value = singleArr[1];
if (obj[name] === undefined) {
obj[name] = isNaN(value)? value: +value;
}
alert(name+': '+value);
}
return obj;
}