如何从具有负值的拆分字符串中获取数组

How To Get An Array From Splitted String That Has Negative Value

我不知道什么是正确的问题。

我想让这个数字-800变成[-8,0,0]是任何人都可以建立它

我做的第一件事就是让数字变成一个字符串,然后使用 map 函数迭代它变成一个这样的数组

const number = -800;
const numberString = number.toString();
const arrayString = numberString.split``.map((x) => +x);

console.log(arrayString)

但是结果是[ NaN, 8, 0, 0 ]

如何在不影响其他索引的情况下将 NaN 和第一个索引 8 变为 -8。所以就变成了[-8, 0, 0]

有人能帮帮我吗?

谢谢。

一个可能的解决方案是仅对绝对值执行此操作,并在 map 期间检查数字是否为负数(仅针对第一个索引)。

const number = -800;
const numberString = Math.abs(number).toString();
const arrayString = numberString.split``.map((x, i) => i == 0 && number < 0 ? -x : +x);

console.log(arrayString)

尝试 numberString.match(/-?\d/g) 而不是 split

const number = -800;
const numberString = number.toString();
const arrayString = numberString.match(/-?\d/g).map(x => +x);

console.log(arrayString)

如果你不清楚Regex,你可以使用Array.from将字符串转换为数组编号。然后根据原数的符号处理第一个数

console.log(convertNumberToArray(800));
console.log(convertNumberToArray(-800));

function convertNumberToArray(number){
  var result = Array.from(Math.abs(number).toString(), Number);
  result[0] *= number <= 0 ? -1 : 1;
  return result;
}

将 String#match 与匹配可选的正则表达式一起使用 - 挖掘它。

var number = -800;
var numberString = number.toString().match(/-?\d/g);
var numberInt = [];

for (var i = 0; i < numberString.length; i++) {
    numberInt.push(parseInt(numberString[i]));
}
console.log(numberInt);