Кто-нибудь может объяснить мне этот Object.keys(this_obj).forEach((ключ)

#javascript #arrays #object

#javascript #массивы #объект

Вопрос:

кто-нибудь может объяснить мне этот фрагмент кода и есть ли какой-нибудь простой способ его написания.

 Object.keys(this_obj).forEach((key) => {
        if (key === 'string') {
            result.push(this_obj[key]);

            return resu<
        }
});
 

Комментарии:

1. Object.keys() . Array.prototype.forEach() . Array.prototype.push()

2. Он просто принимает строку имени ключа в результат

3. Некоторые проблемы… result не определено, и возврат из forEach обратного вызова ничего не делает

4. предположим, что result и this_obj определены

5. Object.keys обычно используется для переноса типов данных, таких как переход от объекта к массиву объектов. codepen.io/evenstensberg/pen/MROqOq

Ответ №1:

Нет необходимости повторять, потому что цикл будет, самое большее, только нажимать на result (который, предположительно, уже определен), если имя ключа string находится на объекте, и будет нажимать значение только на string ключ. Итак, вот более простой способ его написания:

 if (this_obj.hasOwnProperty('string')) {
  result.push(this_obj.string);
}
 

Если string не может быть перечислимым, то это не будет точно таким же, как Object.keys цикл, потому Object.keys что выполняется только перебор перечислимых свойств, поэтому вы можете использовать перечислимую проверку, если это необходимо:

 if (this_obj.propertyIsEnumerable('string')) {
  result.push(this_obj.string);
}
 

( propertyIsEnumerable возвращает false , если свойство не относится непосредственно к объекту)

Я полагаю, что в очень странном случае, который this_obj также имеет пользовательский hasOwnProperty propertyIsEnumerable ключ or, вы должны call вместо этого:

 if (Object.prototype.propertyIsEnumerable.call(this_obj, 'string')) {
  result.push(this_obj.string);
}