Javascript 使用每个对象的数组创建对象数组';姓名
我觉得离这里很近。场景:我在一条类似以下内容的消息中发送了一个JSON:Javascript 使用每个对象的数组创建对象数组';姓名,javascript,arrays,object,Javascript,Arrays,Object,我觉得离这里很近。场景:我在一条类似以下内容的消息中发送了一个JSON: {"objects": { "object_name1":{ "name":"object_name1", "otherData":"some other data" }, {"object_name2":{ "name":"object_name2", "otherData":"some more data" } }}
{"objects": {
"object_name1":{
"name":"object_name1",
"otherData":"some other data"
},
{"object_name2":{
"name":"object_name2",
"otherData":"some more data"
}
}}
filteredKeyArray = ['object_name1','object_name2'];
newObjArray = [];
for(i in filteredKeyArray){
for(key in objects){
newObjArray.push(objects[i[key]]);
}
}
如您所见,对象不在数组中。我使用函数创建了一个包含每个对象字符串名称的数组,然后使用if语句创建了另一个包含我想要的对象的数组,这引出了我当前的问题:
如何使用我创建的数组中包含的字符串值(对象键)创建对象数组
我试过这样的方法:
{"objects": {
"object_name1":{
"name":"object_name1",
"otherData":"some other data"
},
{"object_name2":{
"name":"object_name2",
"otherData":"some more data"
}
}}
filteredKeyArray = ['object_name1','object_name2'];
newObjArray = [];
for(i in filteredKeyArray){
for(key in objects){
newObjArray.push(objects[i[key]]);
}
}
但是newObjArray
只是显示所有未定义的内容。理想情况下,newObjArray
显示如下内容:
{"objects": {
"object_name1":{
"name":"object_name1",
"otherData":"some other data"
},
{"object_name2":{
"name":"object_name2",
"otherData":"some more data"
}
}}
filteredKeyArray = ['object_name1','object_name2'];
newObjArray = [];
for(i in filteredKeyArray){
for(key in objects){
newObjArray.push(objects[i[key]]);
}
}
[{“对象名称1”:{…},{“对象名称2”:{…}]
想法?如果我理解您想要正确执行的操作,您想创建一个包含objectName子对象的iterable数组吗 我将按照下面的方法来做,如果您使用数组原型映射函数,您可以在一行代码中使用object.keys(target)迭代对象的所有键,并通过map返回您想要的属性(在本例中是内部子对象)作为数组元素
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
迭代filteredKeyArray,方法2
请注意,这些解决方案假设您的filteredKeyArray中有一个键来匹配子对象,当映射遍历时,您可能需要添加一个检查来检查filteredKeyArray的长度是否比映射迭代器长,或者如果使用方法1,则检查filteredKeyArray[i]是否未定义。如果使用方法2,在引用Object.keys(strangeObject.objects)[i]之前,您可能需要检查未定义的对象,因为您可能没有那么多适合于eDekKeyArray键的对象。如果我正确理解您想要做的事情,您想创建一个包含objectName子对象的可移植数组吗 我将按照下面的方法来做,如果您使用数组原型映射函数,您可以在一行代码中使用object.keys(target)迭代对象的所有键,并通过map返回您想要的属性(在本例中是内部子对象)作为数组元素
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
迭代filteredKeyArray,方法2
请注意,这些解决方案假设您的filteredKeyArray中有一个键来匹配子对象,当映射遍历时,您可能需要添加一个检查来检查filteredKeyArray的长度是否比映射迭代器长,或者如果使用方法1,则检查filteredKeyArray[i]是否未定义。如果使用方法2,在引用Object.keys(strangeObject.objects)[i]之前,您可能需要检查未定义的对象,因为您可能没有那么多适合eRedKeyArray键的对象。您输入的语法无效,特别是
},{
part-对象有键值对,而不仅仅是纯值。这不是有效的JSON-您从哪里获得的?您希望输出是什么?请发布一个,包括所需的输出。您输入的语法无效,特别是},{
part-对象有键值对,而不仅仅是纯值。这不是有效的JSON-您从哪里获得的?您希望输出是什么?请发布一个,包括所需的输出。谢谢!如果filteredKeyArray中的项比初始重新映射中的嵌套对象多,这有关系吗?例如filteredKeyArray=['object_name1','object_name2']
和{“奇怪的对象”:{“object_name1”:{…}
我个人会映射到对象上,并使用映射迭代器获得相关的filteredKeyArray(如方法1)。例如,您可以将该映射返回对象键替换为[filteredKeyArray[I]| |“unnamed']如果未定义,您将获得默认值(在本例中未命名)作为键,而不是“未定义。快乐狩猎!谢谢!filteredKeyArray中的项是否比初始重新映射中的嵌套对象多重要?例如filteredKeyArray=['object_name1','object_name2']
和{“陌生对象”:{“object_name1”:{…}
我个人会映射到对象上,并使用映射迭代器获取相关的filteredKeyArray(如方法1中所示),例如,您可以将该映射返回对象键替换为[filteredKeyArray[I]| |“unnamed']。这样,如果filteredKeyArray[I]未定义,您将获得默认值(在本例中为unnamed)作为钥匙,而不是“未定义。快乐狩猎!