8

I currently have an array of strings that are numbers

data.dataArr = [0: " 1,431,417 "
​​
1: " 1,838,127 "
​​
2: " 679,974 "
​​
3: " 2,720,560 "
​​
4: " 544,368 "
​​
5: " 1,540,370 "]

I am attempting to remove the commas so my data returns 0: "1431417" , 1: 1838127 ...

After removing commas I am then mapping this array to convert it to an array of numbers and not strings. But when console.logging the finalArray that should return an array of numbers I am getting NaN I believe this is due to the part of removing the commas.

Here is my code:

let data = {
  dataArr: [
  " 1,431,417 ",
    " 1,838,127 ",
    " 679,974 ",
    " 2,720,560 ",
    " 544,368 ",
    " 1,540,370 "
  ]
};

//removing commas
let arrData = data.dataArr.map(e => e.replace(/(,\s*)+/, ','));
let finalArr = arrData.map(Number);
console.log(finalArr)

alternatively I've tried :

let arrData = data.dataArr.replace(/,/g, "")

Which resulted in "data.dataArr.replace is not a function"

1
  • 2
    You're using invalid data. Arrays are not key:value pairs. Commented May 7, 2020 at 15:02

7 Answers 7

6

You can use number in same map callback function, g to remove all occurrence of ,

dataArr = [" 1,431,417 ", " 1,838,127 ", " 679,974 ", " 2,720,560 ", " 544,368 ", " 1,540,370 "]

let arrData = dataArr.map(e => Number(e.replace(/(,\s*)+/g, '').trim()));
console.log(arrData)

Sign up to request clarification or add additional context in comments.

Comments

3
      ['1,234', '7,8,90,'].map(eachNo => {
return eachNo.split(',').join('')
});

Split() will split string where it will find ,(comma) and will return an array of strings.
join() will operate on array of strings.

Comments

2

There also seems to be a space in your array which would be giving NaN, Remove everything other than digits and maybe a dot.

Try this regex:

e.replace(/[^\d.]/g, '');

1 Comment

\D is the same as [^\d]
1

Use Array.prototype.map()

const data = {};
data.dataArr = [
  "   1,431,417 ",
  " 1,838,127 ",
  " 679,974 ",
  " 2,720,560 ",
  " 544,368 ",
  " 1,540,370 ",
];

const numbersArray = data.dataArr.map(str => Number(str.replace(/\D/g, '')));

console.log(numbersArray)

Comments

1

Maybe like this:

var data = {};

data.dataArr =
  [
    " 1,431,417 ",
    " 1,838,127 ",
    " 679,974 ",
    " 2,720,560 ",
    " 544,368 ",
    " 1,540,370 "
  ];

function array_to_numbers(_arr){
	var out = [];
	for(var key in _arr){
	  var el = 	_arr[key];
	  el = el.trim();
	  el = el.replace(new RegExp(',','g'), '');
	  el = parseInt(el)||0;
	  out.push(el);
	}
	return out;
}
console.log(array_to_numbers(data.dataArr));

Comments

1

You can .map() over the array and split up by , and then join them at "". You also need to wrap everything in Number to convert it to an number

let dataArr =  [
  " 1,431,417 ",
    " 1,838,127 ",
    " 679,974 ",
    " 2,720,560 ",
    " 544,368 ",
    " 1,540,370 "
  ]
  
  let result = dataArr.map(el => Number(el.split(",").join("")))
  
  console.log(result)

Comments

1

let data = new Object();
data.dataArr = [ " 1,431,417 ",
" 1,838,127 ",
" 679,974 ",
" 2,720,560 ",
" 544,368 ",
" 1,540,370 "];

const finalArr = data.dataArr.map(x => x.replace(/[^0-9]/g, ''));

console.log(finalArr)

1 Comment

The regex here /[^0-9]/g should actually be replaced with /[^+-0-9.]/g as otherwise negative and decimal numbers will be corrupted

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.