возможно ли заменить Object.keys (myObj) на цепную нотацию?

Я изучаю React, и я нахожу решение, предлагаемое для сопоставления объекта итеративно в тегах jsx, может быть более интуитивным. Вместо

Object.keys(myObj).map(...)

я хотел бы написать что-то вроде:

myObj.keys.map(...)

Я прочитал статью здесь Ричардом Бовелом, но для этого требуется создать новый объект и скопировать - вставлен в codePen, но я не вижу, как это можно сделать с такими объявлениями, как

state={...}

или

myObject={...}
0
задан 13 August 2018 в 14:23

2 ответа

Не могли бы вы быть более преданными?

Вы хотите просто заменить Object.keys ()? Затем используйте записи объектов Es8 и итерации по этому массиву.

Если вы хотите оптимизировать код из codePen, то в какой части вы говорите? Поиск правильной электронной почты? Тогда я бы предложил использовать ie. findIndex () и проверяет, возвращает ли он -1.

0
ответ дан 15 August 2018 в 17:03
  • 1
    Вы должны написать этот тип вопросов в комментарии, это не ответ. Что касается вопроса, я думаю, он просто хочет улучшить стиль кодирования, цепляясь и не используя Object.key или Object.entries – Leo Odishvili 13 August 2018 в 14:38
  • 2
    Я также дал два возможных решения. Один, для использования Object.keys (), если OP хочет сократить синтаксис, а во-вторых, для альтернативного подхода, если все, что он на самом деле хочет, - это лучше читаемость предоставленного фрагмента кода. – justMe 13 August 2018 в 14:48

Вы можете достичь object.keys, выполнив следующие действия:

const myObject = {
  someProp: 'test',
  someSecondProp: 'test2',
}

Object.defineProperty(
  myObject, 
  'keys', 
  {
    enumerable: false, 
    get: function() {
      return Object.keys(this) 
    },
  }
)

myObject.keys  // ['someProp', 'someSecondProp']
myObject.keys.map(...)

Определение этого нового свойства может быть выполнено в функции вашего собственного создания. Хотя я бы не стал беспокоиться об этом только для этого типа коротких рук, так как я доволен использованием Object.keys(). В качестве альтернативы вы можете определить функцию keys, которая в значительной степени просто выполняет Object.keys.

function keys(object) {
  return Object.keys(object)
}

keys(myObject).map(...)

Изменить: Как указывалось мне в комментариях, вы также можете вытащить keys - из объекта Object.

const { keys } = Object
1
ответ дан 15 August 2018 в 17:03
  • 1
    В качестве альтернативы вы можете определить ключевую функцию, которая в значительной степени просто выполняет Object.keys - это избыточно. Object, и многие другие статические методы могут быть разыменованы. Это const {key} = Object. – estus 13 August 2018 в 20:01
  • 2
    Хм, это может сработать. Но так как я не знаю или не проверяю, ведет ли он себя так же, я не предлагал это так. – stinodes 13 August 2018 в 20:04
  • 3
    Я могу подтвердить, что это работает, разыменованные статические методы можно увидеть во многих хорошо написанных сторонних библиотеках, Object в частности. Это законный способ сохранить несколько байтов. – estus 13 August 2018 в 20:06
  • 4
    Хорошо, хорошо знать. – stinodes 13 August 2018 в 20:07

Другие вопросы по тегам:

Похожие вопросы: