JS фильтр Что такое пункт [ключ]? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть следующее, которое работает, но меня смущает. Может ли кто-нибудь объяснить, к какому предмету относится [ключ]?

const items=[{name:"Joe",occupied:"no",mobile:"yes",treatment:"no",date:"29-03-2020",age:"15",stuff:["A","B","C"],type:["1","2"]},{name:"Jack",occupied:"yes",mobile:"no",treatment:"no",date:"02-03-2020",age:"20",stuff:["A","B","C","D","E"],type:["8","6"],misc:["otherStuff","someStuff"]},{name:"Jane",occupied:"no",mobile:"yes",treatment:"yes",date:"15-02-2020",age:"28",stuff:["C","D","E"],type:["4","7"],something:["xxx","ccc"]}];

const keysWithArrays = new Set(
  items.flatMap(
     item => Object.keys(item).filter(key => Array.isArray(item[key]))   
  )
);

console.log([...keysWithArrays]);

1 Ответ

1 голос
/ 30 марта 2020

Для объекта item, например

{
  name:"Joe",
  occupied:"no",
}

Перебирая его ключи с помощью Object.keys, вы получаете ['name', 'occupied']. Доступ к item[key] на объекте даст вам значение этого ключа, например 'Joe' или 'no'.

Вот еще один способ сделать то же самое, но с Object.entries, который дает массив записей (пары ключ-значение, в виде массива: [[key, value], [key, value], [key, value]]) вместо массива ключей ([key, key, key]):

const items=[{name:"Joe",occupied:"no",mobile:"yes",treatment:"no",date:"29-03-2020",age:"15",stuff:["A","B","C"],type:["1","2"]},{name:"Jack",occupied:"yes",mobile:"no",treatment:"no",date:"02-03-2020",age:"20",stuff:["A","B","C","D","E"],type:["8","6"],misc:["otherStuff","someStuff"]},{name:"Jane",occupied:"no",mobile:"yes",treatment:"yes",date:"15-02-2020",age:"28",stuff:["C","D","E"],type:["4","7"],something:["xxx","ccc"]}];

const keysWithArrays = new Set(
  items.flatMap(
     item => Object.entries(item)
                   .filter(([key, value]) => Array.isArray(value))
                   .map(([key]) => key)
  )
);

console.log([...keysWithArrays]);

(но для этого требуется дополнительный .map в конце)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...