Строка в массив - разделение, возвращающее значение NaN |Javascript - PullRequest
0 голосов
/ 11 мая 2018

Я хочу преобразовать строку в массив. это работает только с числовым значением. в следующем примере «border_color & border_style keys» возвращает NaN в качестве значения.

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]-0;
        if (obj[name] === undefined) {
            obj[name] = value;
        }
        alert(name+': '+value);
    }
    return obj;
}

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Не совсем уверен, как вы хотите вернуть, но вы можете использовать: Object.values ​​()

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 keys = []
    var values = []
	var obj = {};
	for (var i = 0; i < arr.length; i++) {
		var singleArr = arr[i].trim().split('=');           
        keys.push(Object.values(singleArr)[0])
        values.push(Object.values(singleArr)[1])          
       
	}

   alert(values)
   alert(keys)

	return obj;
}
0 голосов
/ 11 мая 2018

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;
}
...