我觉得这里很吸引人。场景:我在一条消息中发送了一个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":{...}}]
有想法吗?
答案 0 :(得分:2)
如果我了解您要正确执行的操作,则想创建一个包含objectName子对象的可迭代数组?
我将按以下方式进行操作,如果使用数组原型映射函数,则可以在一行代码中使用Object.keys(target)遍历对象的所有键,然后返回所需的属性(在这种情况下)内部子对象)作为通过地图的数组元素。
slice(3,10,2)
3:10:2
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' } ]
请注意,这些解决方案假定在map迭代过程中,filteredKeyArray中将有一个与子对象匹配的键,您可能需要添加检查以检查是否FilteredKeyArray的长度长于map迭代器,或者如果使用方法1,则未定义filteredKeyArray [i]。如果使用方法2,则在引用Object.keys(strangeObject.objects)[i]之前,可能需要检查undefined,因为对象的数量可能少于keyedKeyArray键。>