2016-08-25 5 views
0

ребята! У меня проблема с преобразованием массива строк в поплавки. Если я использую map (parseFloat), я получаю int numbers. Есть ли проблема с запятыми в 40,78, поэтому я получаю 40, когда я использую функцию parseFloat?AngularJS преобразует массив строк в массив float

Это массив, который я хочу, чтобы преобразовать:

[["40,78","6,27","0,00",null,null,null,null,null,null,null,null,null,"35,87",null,null]]; 

Я хочу, чтобы преобразовать его в этом:

[[40.78,6.27,0.00,null,null,null,null,null,null,null,null,null,35.87,null,null]]; 

Кто-нибудь есть какие-либо идеи? Заранее спасибо!

+0

Но, если вы сделаете это, и когда вы проверяете длину массива, он будет возвращать только '1'. –

ответ

0
var arr = ["40,78","6,27","0,00",null,null,null,null,null,null,null,null,null,"35,87",null,null]; 
arr.map(function(v) { 
    return v === null ? v : parseFloat(v.replace(",", ".")); 
}); 

В вашем случае у вас есть двойной массив. Зависит от вашего варианта использования, если вы делаете дополнительный вызов .map или обрабатываете внешний массив другим способом.

2

Это как вы говорите. parseFloat() рассматривает только числа с плавающей запятой только с . символом, а не ,. Кроме того, он возвращает NaN для null значения:

var arr = ["40,78","6,27","0,00",null,null,null,null,null,null,null,null,null,"35,87",null,null]; 
 
    
 
var res = arr.map(function(val) { 
 
    return val ? parseFloat(val.replace(',', '.')) : null; 
 
}); 
 

 
console.log(res);

0

Вы '40, 78' разделенной запятой строки, для разбора, чтобы плавать вам нужно иметь точку разделенных строк: Fe '40 0,78' и карту (parseFloat) будет работать правильно.

1

Решение:

function MyCtrl($scope) { 
    $scope.array= ["40,78","6,27","0,00",null,null,null,null,null,null,null,null,null,"35,87",null,null] 
    for(var i=0; i<$scope.array.length; i++) { 
     if ($scope.array[i] !== null) { 
      $scope.array[i] = parseFloat($scope.array[i].replace(',','.')) 
     } 
    } 
} 

Ссылка: http://jsfiddle.net/p2kpeptq/1/