如何忽略 JavaScript 将前导零转换为八进制?

3

我想把number转换成string,但我在JavaScript将带前导零的数字转换为八进制数时遇到了问题。

我有一个像这样的对象列表:

const ids = [
  { _id : 1236 },
  { _id : "abc123" },
  { _id : 012019 },
  { _id : 000010 },
  { _id : 001230 }
  { _id : 00000000000000 }
]

我想要将对象中的所有id都转换成 字符串,就像这样

[
  { _id : "1236" },
  { _id : "abc123" },
  { _id : "012345" },
  { _id : "000010 },
  { _id : "001230" },
  { _id : "00000000000000" }
]

因此,我编写了以下这个函数:

updateIds = () => ids.map(i => {
  i._id = i._id.toString()
  return i
})

updateIds()

但是这个函数的结果是...
[
  { _id: '1236' },
  { _id: 'abc123' },
  { _id: '012019' },
  { _id: '8' },
  { _id: '664' },
  { _id: '0' }
]

我该如何忽略javascript将000010001230转换为八进制?

附:我认为无法使用pad函数编写前导零,因为_id的值是动态的。我不知道它的长度。


你可以在这里看一下:https://stackoverflow.com/q/58336825/1447675 - Nina Scholz
顺便说一下,在转换后前导零已经消失了。 - Nina Scholz
2
我有一个对象列表如下,如果作为实际的JS代码,那么在解析时就已经丢失了原始值。将其记录到控制台中,你会看到000010已经变成了8。你需要将其作为文本处理,并编写自己的解析器来处理它... - 04FS
那个ID数组来自哪里?它是在某个地方生成的吗?如果是,你应该调整代码,将“_id”值作为字符串开始生成。 - TiiJ7
它来自于 csv 文件中的值。 - Earn Asdsa
2
你如何将CSV转换为你在问题中所拥有的对象结构?我建议你更改代码的某一部分,使得id值保持为字符串而不是数字。 - TiiJ7
2个回答

4

toString调用中,您需要定义要使用的基数。

如果您希望将ID解析为基数10,则调用toString(10)。由于数字是数字,因此无法执行填充以保留长度,因此前导零被忽略。您可以为所有ID填充到固定的长度:

updateIds = () => ids.map(i => {
  i._id = i._id.toString(10).padStart(9, '0');
  return i
})

1
使用构造函数调用 Number("001230")。它将所有数字转换为仅限于十进制,因此您不会遇到八进制转换问题。
const ids = [
  { _id : 1236 },
  { _id : "abc123" },
  { _id : 012019 },
  { _id : 000010 },
  { _id : 001230 },
  { _id : 00000000000000 }
];

let ans = [];

ids.forEach((val)=>{

    let obj = {};
    obj._id = Number(val["_id"]);
    ans.push(obj);

})

console.log(ans);

2
“使用构造函数调用Number("001230")” - 在这里不可能实现,因为您已经没有那个值001230了。将ids记录到控制台中,您会发现001230已经在其中变成了664。这是在解析对象文字的步骤中发生的。 - 04FS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接