javascript - 使用包含每个对象名称的数组创建对象数组
问题描述
我觉得这里离我很近。场景:我在消息中发送了一个 JSON,看起来像这样:
{"objects": {
"object_name1":{
"name":"object_name1",
"otherData":"some other data"
},
{"object_name2":{
"name":"object_name2",
"otherData":"some more data"
}
}}
如您所见,对象不在数组中。我使用Object.keys函数创建了一个包含每个对象的字符串名称的数组,然后使用 if 语句创建了另一个包含我想要的对象的数组,这导致了我当前的问题:
如何使用我创建的数组中包含的字符串值(对象键)创建对象数组?
我试过这样的事情:
filteredKeyArray = ['object_name1','object_name2'];
newObjArray = [];
for(i in filteredKeyArray){
for(key in objects){
newObjArray.push(objects[i[key]]);
}
}
但这newObjArray
只是显示所有未定义的。理想情况下,newObjArray
显示如下:
[{"object_name1":{...}},{"object_name2":{...}}]
想法?
解决方案
如果我理解您想要正确执行的操作,您想创建一个包含 objectName 子对象的可迭代数组?
我会这样做,如果你使用数组原型映射函数,你可以在一行代码中使用 Object.keys(target) 遍历对象的所有键并返回你想要的属性(在这种情况下是内部子对象)通过映射作为数组元素。
strangeObject = {
"objects":{
"objectName_1":{
"name":"x",
"otherData":"some other data"
},
"objectName_2":{
"name":"y",
"otherData":"some other data"
}
}
}
const arrayOfObjects = Object.keys(strangeObject.objects).map(key => strangeObject.objects[key])
console.log(arrayOfObjects)
// logs [ { name: 'x', otherData: 'some other data' },
// { name: 'y', otherData: 'some other data' } ]
映射为您的示例,方法 1
const filteredKeyArray = ['x','y'];
const remappedArray = Object.keys(strangeObject.objects).map((key, i) => {
return { [filteredKeyArray[i]] : strangeObject.objects[key]}
})
console.log(remappedArray)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
遍历filteredKeyArray,方法2
const filteredIterator = filteredKeyArray.map((key, i) => {
return { [key]: strangeObject.objects[Object.keys(strangeObject.objects)[i]]}
})
console.log(filteredIterator)
// logs [ { x: { name: 'x', otherData: 'some other data' } },
// { y: { name: 'y', otherData: 'some other data' } } ]
请注意,这些解决方案假定您将在您的 filteredKeyArray 中有一个键来匹配子对象,因为映射迭代,您可能需要添加一个检查来检查 filteredKeyArray 的长度是否比映射迭代器长,或者如果如果使用方法 1,filteredKeyArray[i] 是未定义的。如果使用方法 2,您可能需要在引用 Object.keys(strangeObject.objects)[i] 之前检查未定义,因为您的对象可能少于 fiteredKeyArray 键。
推荐阅读
- php - 上传使用PHP里面的文件和html文档
- c# - 在 ASP.NET 中的一组单选按钮(与 GroupName 属性相关联)中查找选定单选按钮的值的最佳方法
- css - 当我在头部导入时,反应 css 导入在 cdn 中不起作用
- excel - VLookUp 和格式化
- java - 如何删除工具栏上方的空间?
- macos - NLTK 数据下载在 Anaconda 环境中的 MacOS 上挂起
- ruby-on-rails - 如何将我的代码库恢复到我最近的部署?
- mongodb - 如何在 mongodb 中将当前时间戳插入或更新为 NumberLong
- fabricjs - 视频上的 ClipPath 的 FabricJS 问题
- android - 服务发送多个广播消息