Недавно я работал над простой функцией для выравнивания объекта в JS. У меня есть вложенный объект (глубина не определена), и мне нужно было преобразовать его в плоский объект.

to:

Поэтому я создал функцию flatten и применил ее непосредственно к объекту flatten(obj), и это сработало.

Затем в некоторых случаях мне нужно было преобразовать массив этих объектов. Поэтому я только что подал заявку

itemsArr.map(flattenObject)

Эта функция использовалась в основном в тех случаях, когда у нас был только один объект, но иногда я получал отчеты об ошибках, говорящие о проблемах, когда нам нужно было преобразовать несколько объектов.

Как вы могли понять из приведенного выше кода, проблема была связана с тем, как работают обратные вызовы в .{map,reduce,ect}.

Когда нужно было обработать несколько элементов, первый вызов был:

flattenObject(item1, idx1, itemsArr)

и в строке 8 composedKey = (parentKey ? parentKey + '.' : '') + key, потому что parentKey = 0. Но для следующих объектов parentKey будет › 0, и я получаю '1.имя поля'.

Это то, о чем все знают, но об этом можно забыть, особенно потому, что обычно мы не используем второй и третий параметры функции map.

Я предполагаю, что это может быть кандидатом на добавление в инструменты линтинга, такие как ESLint, JSHint.