簡體   English   中英

使用每個對象名稱的數組創建對象數組

[英]Creating an array of objects using an array of each object's name

我覺得這里很吸引人。 場景:我在消息中發送了一個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' } } ]

請注意,這些解決方案假定在map迭代過程中,filteredKeyArray中將有一個與子對象匹配的鍵,您可能需要添加檢查以檢查是否FilteredKeyArray的長度長於map迭代器,或者是否如果使用方法1,則filteredKeyArray [i]是未定義的。如果使用方法二,則在引用Object.keys(strangeObject.objects)[i]之前,可能需要檢查未定義的對象,因為對象可能少於fiteredKeyArray鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM