Во-первых, это не очень хороший забавный мысленный анализ кода: было бы полезно, если бы вы могли сказать, что делает ваш код, вместо того, чтобы оставлять его нам для анализа, особенно когда он делает что-то странное, например, циклическое переключение клавиш. в массиве, делая вычисление на ключе, затем используя обратное значение из массива. Самые необычные!
Проблема с for..in
l oop, как описано в документации ESLint . Это правило ESLint требует, чтобы, если вы используете for..in
l oop, вы запускали Object.prototype.hasOwnProperty
для каждого ключа, чтобы убедиться, что это часть нужного вам объекта, а не из какого-то другого кода, который добавил свойство к Object.prototype
(или, в данном случае, также String.prototype
). Это разумное защитное кодирование.
Таким образом, вы могли бы сделать это:
for (const ii in intPart) {
if (!Object.prototype.hasOwnProperty.call(intPart, ii)) {
continue;
}
...
Но это для меня не очень хорошее решение, и на самом деле возможно реорганизовать ваш код в более хорошем, более простом для понимания пути, который также решает эту проблему:
const formattedNum = intPart
.split('') // split the string into an array of digits
.reduceRight((acc, val, idx) => { // loop through the array with a reducer function, starting at the right
acc.unshift(val); // add the digit to the beginning of the output array
if (
idx && // if it's not the first item in the array (where idx === 0)
((intPart.length - idx) % 3 === 0) // and it is a multiple of three from the end of the array
) {
acc.unshift(','); // add a comma to the beginning of the array
}
return acc;
}, []);