使用每个对象名称的数组

时间:2018-12-29 22:49:23

标签: javascript arrays object

我觉得这里很吸引人。场景:我在一条消息中发送了一个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":{...}}]

有想法吗?

1 个答案:

答案 0 :(得分:2)

如果我了解您要正确执行的操作,则想创建一个包含objectName子对象的可迭代数组?

我将按以下方式进行操作,如果使用数组原型映射函数,则可以在一行代码中使用Object.keys(target)遍历对象的所有键,然后返回所需的属性(在这种情况下)内部子对象)作为通过地图的数组元素。

slice(3,10,2)

映射为您的示例方法1

3:10:2

遍历filteredKeyArray方法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键。