首页 > 解决方案 > JS过滤什么是item[key]?

问题描述

我有以下工作但让我感到困惑。有人可以解释一下 item[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.keys(item).filter(key => Array.isArray(item[key]))   
  )
);

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

标签: javascriptobjectfilter

解决方案


对于一个对象item,例如

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

迭代它的键Object.keys给你['name', 'occupied']. 访问item[key]对象将为您提供该键的值,例如'Joe'or '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的最后)


推荐阅读