Javascript 从嵌套在对象属性中的数组中提取数据

Javascript 从嵌套在对象属性中的数组中提取数据,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我试图从数组中获取一些数据,但我似乎总是在与数组斗争。我的数据采用以下结构 { tempAttachments: [{ _id: "12345-678910", bytes: 412051, file: 'File', size: 411532, title: "someFile.csv", headers

我试图从数组中获取一些数据,但我似乎总是在与数组斗争。我的数据采用以下结构

{
    tempAttachments: [{
            _id: "12345-678910",
            bytes: 412051,
            file: 'File',
            size: 411532,
            title: "someFile.csv",
            headers: ['optionOne', undefined, 'optionTwo', undefined, undefined, 'optionThree'],
            type: "file",
            fileType: "typeOne"
        }, {
            _id: "9999-2222",
            bytes: 12345,
            file: 'File',
            size: 23456,
            title: "anotherFile.csv",
            headers: ['optionOne'],
            type: "file",
            fileType: "typeTwo"
        }
    ]
}
我正在尝试将headers部分输出到它自己的数组中。索引很重要,因为它们与某些事物相关。我还将文件类型用作标识符。所以我的目标是以这样的方式结束

[
  {
    "typeOne": [
      "optionOne",
      "optionTwo",
      "optionThree"
    ]
  },
  {
    "typeTwo": [
      "optionOne"
    ]
  }
]
如您所见,我忽略了未定义的选项。所以我现在尝试的是

const mapping = {}
for (const attachment of this.tempAttachments) {
  for (const [index, header] of attachment.headers.entries() || []) {
    mapping[attachment.fileType] = [
      index, header
    ]
  }
}
不幸的是,结果如下

[
  {
    "typeOne": [
      0,
      "optionOne"
    ]
  },
  {
    "typeTwo": [
      0,
      "optionOne"
    ]
  }
]
那么,我如何才能实现我所追求的产出呢

谢谢

您可以与一起使用,以摆脱Unfind的内部标题:

const src={tempaachments:[{u id:12345-678910,字节:412051,文件:'file',大小:411532,标题:someFile.csv,标题:['optionOne',未定义,'optionwo',未定义,未定义,'optiontree',类型:file,文件类型:typeOne},{u id:9999-2222,字节:12345,文件:'file',大小:23456,标题:anotherFile.csv,标题:['optionOne',类型:file,文件类型:typeTwo}, 结果=src .临时附件 .map{headers,fileType}=>{ [文件类型]:headers.filterBoolean } console.logresult .作为控制台包装器{min height:100%;}您可以与一起使用,以摆脱Unfind的内部标题:

const src={tempaachments:[{u id:12345-678910,字节:412051,文件:'file',大小:411532,标题:someFile.csv,标题:['optionOne',未定义,'optionwo',未定义,未定义,'optiontree',类型:file,文件类型:typeOne},{u id:9999-2222,字节:12345,文件:'file',大小:23456,标题:anotherFile.csv,标题:['optionOne',类型:file,文件类型:typeTwo}, 结果=src .临时附件 .map{headers,fileType}=>{ [文件类型]:headers.filterBoolean } console.logresult
.作为控制台包装{min height:100%;}没有一个简单的映射和过滤器不能做的事情

常量数组=[ {headers:[optionOne,undefined,optionTwo,undefined,undefined,optionTree],文件类型:typeOne}, {headers:[optionOne],文件类型:typeTwo}, ] 函数过滤选项{ 返回选项!==未定义 } const result=arrays.reduceresult,element=>{…result,[element.fileType]:element.headers.filterfilter},{}
console.logresult没有一个简单的映射和过滤器不能做的事情

常量数组=[ {headers:[optionOne,undefined,optionTwo,undefined,undefined,optionTree],文件类型:typeOne}, {headers:[optionOne],文件类型:typeTwo}, ] 函数过滤选项{ 返回选项!==未定义 } const result=arrays.reduceresult,element=>{…result,[element.fileType]:element.headers.filterfilter},{} console.logresult使用映射和过滤器

常数数据=[ { 标题:[ optionOne, 未定义, 选项二, 未定义, 未定义, 选择树, ], fileType:typeOne, }, {headers:[optionOne],文件类型:typeTwo}, ]; const res=data.map{headers,fileType}=>{ [文件类型]:headers.filterBoolean, }; console.logres 使用映射和过滤器

常数数据=[ { 标题:[ optionOne, 未定义, 选项二, 未定义, 未定义, 选择树, ], fileType:typeOne, }, {headers:[optionOne],文件类型:typeTwo}, ]; const res=data.map{headers,fileType}=>{ [文件类型]:headers.filterBoolean, }; console.logres 你可以试试

tempAttachments.map(
  ({headers,fileType}) => {
    return ({[fileType]: headers.filter((val) => val)})
  }
)
你可以试试

tempAttachments.map(
  ({headers,fileType}) => {
    return ({[fileType]: headers.filter((val) => val)})
  }
)
const data=[{u id:'12345-678910',字节:412051,文件:'file',大小:411532,标题:'someFile.csv',标题:['optionOne',未定义,'optionwo',未定义,未定义,'optiontree',],类型:'file',文件类型:'typeOne',},{u id:'9999-2222',字节:12345,文件:'file',大小:23456标题:'anotherFile.csv',标题:['optionOne',类型:'file',文件类型:'typetype','typeTwo',};; const result=data.mapd=>{ 让标题=[]; d、 headers.foreach,索引=>{ 如果!h==未定义的| | h==空标头。推送{[index]:h}; }; 返回{ [d.fileType]:[…头], }; }; console.logresult; .作为控制台包装{最小高度:100%;} const data=[{u id:'12345-678910',字节:412051,文件:'file',大小:411532,标题:'someFile.csv',标题:['optionOne',未定义,'optionwo',未定义,未定义,'optiontree',],类型:'file',文件类型:'typeOne',},{u id:'9999-2222',字节:12345,文件:'file',大小:23456标题:'anotherFile.csv',标题:['optionOne',类型:'file',文件类型:'typetype','typeTwo',};; const result=data.mapd=>{ 让标题=[]; d、 headers.foreach,索引=>{ 如果!h==未定义的| | h==空标头。推送{[index]:h}; }; 返回{ [d.fileType]:[…头], }; }; console.logresult;
。作为控制台包装{min height:100%;}这将删除所有错误值,而不仅仅是未定义的值。这将删除所有错误值,而不仅仅是未定义的值。您是如何更改答案的?第一个实际上是正确的,因为它还显示了所需的索引。我附加了从标题中过滤掉未定义的内容,但它并没有提供您预期的输出。您的第一个答案似乎是正确的。我没有得到任何未定义
ined值,它包含索引。您是如何更改答案的?第一个实际上是正确的,因为它还显示了所需的索引。我附加了从标题中过滤掉未定义的内容,但它并没有提供您预期的输出。您的第一个答案似乎是正确的。我没有得到任何未定义的值,它包含索引