Как я могу установить только целое число из строкового значения?

0

У меня есть угловые параметры, где я показываю размер файла, но я использую значение переменной для вычисления некоторых байтов, где мне нужно просто целое, например, если пользователь выбирает "1 МБ", я хочу назначить переменной maxMb 1. возможно ли это с помощью javascript?

ctrl.js

 var maxMb;
 $scope.FileSizeOptions = ["1MB","2MB","3MB","4MB","5MB"];
    $scope.$watch('selectedFileSize',function (Val) {
        maxMb = Val;
        console.log('File Size', maxMb);
    })

var maxBytes = 1000 * 1000 * maxMb;
  • 0
    либо сохраните карту key-> value, например, filesizeoptions = {"1MB" : 1, "2MB":2} , либо какое-нибудь хакинг / преобразование строки, чтобы извлечь целое число из вашей строки. parseInt('1MB') -> 1
  • 0
    Просто вставьте два последних символа maxMb и проанализируйте строку как целое число.
Теги:

3 ответа

1
Лучший ответ

Если у вас есть контроль над набором данных, я бы рекомендовал установить fileSizeOption как массив объектов с как отображаемым значением, так и значением размера. Таким образом, нет разборчивости объектов. См. Фрагмент кода и код

http://codepen.io/Lethargicgeek/pen/BzEjPX

angular.module("myApp", []);

angular.module("myApp").controller("myCtrl", ctrlFn);

function ctrlFn() {
  var $ctrl = this;
  $ctrl.fileSizeOptions = [{
    size: 1,
    value: "1MB"
  }, {
    size: 2,
    value: "2MB"
  }, {
    size: 3,
    value: "3MB"
  }, {
    size: 4,
    value: "4MB"
  }, {
    size: 5,
    value:"5MB"
  }];
  $ctrl.onChange = onChange;

  function onChange() {
    $ctrl.maxMb = $ctrl.selectedFileSize.size;
    $ctrl.maxBytes = 1000 * 1000 * $ctrl.maxMb;
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.5/angular.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<div ng-app="myApp">
  <div ng-controller="myCtrl as $ctrl">
    <select ng-model="$ctrl.selectedFileSize"
            ng-options="opt as opt.value for opt in $ctrl.fileSizeOptions"
            ng-change="$ctrl.onChange()">
    </select>
    
    <dl>
      <dt>$ctrl.selectedFileSize</dt>
      <dd>{{$ctrl.selectedFileSize}}</dd>
      
      <dt>$ctrl.maxMb</dt>
      <dd>{{$ctrl.maxMb}}</dd>
      
      <dt>$ctrl.maxBytes</dt>
      <dd>{{$ctrl.maxBytes}}</dd>      
    </dl>
  </div>
</div>
  • 0
    Спасибо, у меня есть контроль над данными, я создал массив объектов и используя ваш подход. Еще раз спасибо.
3

Вы можете (ab) использовать parseInt и тот факт, что он преобразует строку в целое число и остановит преобразование, когда оно попадет в нечисловой символ.

console.log(parseInt('1MB', 10));  // 1
console.log(parseInt('2MB', 10));  // 2
console.log(parseInt('5MB', 10));  // 5
console.log(parseInt('10MB', 10)); // 10
  • 0
    Да, это сработало, но тогда я не могу назначить его maxBytes = 1000 * 1000 * maxMb идет NaN
  • 2
    @hussain Вы должны выполнить это в обратном вызове. В противном случае maxMb будет неопределенным.
0

Вы можете отрезать последние два символа, а затем использовать унарный + для принудительного перевода в int или заменить все нечисловые символы, а затем принудительно использовать значение.

console.log(+'1MB'.slice(0, -2));
console.log(+'1MB'.replace(/\D/g, ''));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню