Array.isArray(Object.keys(object[id].eventName))
всегда будет возвращать true, поскольку:
Метод Object.keys () возвращает массив имен собственных перечисляемых свойств данного объекта
Вам необходимо проверить object [id] .eventName напрямую :
Array.isArray(object[id].eventName)
Я также хотел бы предложить изменить структуру данных, так как часть кода, кажется, повторяется в зависимости от независимо от того, является ли eventName строкой или массивом, вы всегда можете использовать последний, потому что нет ничего плохого в итерации по массиву, который содержит только один элемент.
Другим улучшением может быть итерация по Object.keys (объект) массив напрямую. Может быть сделано с помощью:
- функции forEach объекта массива
- регулярной для l oop
- for..of
let object = { foo: 'bar', x: 10 }
// forEach
Object.keys(object).forEach(key => console.log(key));
const keys = Object.keys(object);
// for
for (let i = 0; i < keys.length; ++i) {
console.log(keys[i])
}
// for...of
for (let key of keys) {
console.log(key);
}
Поскольку вы фактически перебираете объект / карту / словарь, стандартный способ сделать это в JS - это для ... в l oop.
Может потребоваться проверка hasOwnProperty (), если вы имеете дело с более сложными типами.
let object = { foo: 'bar', x: 10 }
for (let key in object) {
console.log(key);
}