#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);
}