我正在尝试在对象内部创建数组
const gameItemFlagMap = await functions.fetchGameItemFlagMap(item_id);
const items = [];
const object = {
flags: [null],
}
if (gameItemFlagMap[i].item_flag_id) {
for (let j = 0; j < gameItemFlagMap.length; j++) {
// object -> flags -> flags_id & flags_identifier
string = "object.flags.flag_id_"
object_name = string.concat(i);
[object_name] = [gameItemFlagMap[i].item_flag_id];
gameItemFlags = await functions.fetchGameItemFlags(gameItemFlagMap[i].item_flag_id);
string = "object.flags.flag_identifier_";
object_name = string.concat(i);
[object_name] = [gameItemFlags[0].flag_identifier];
}
items.push(object);
}
在对象内部写入数组或语法正确时,我不在放置索引值的地方。
添加的注释:
从数据库中提取的数据大约有20行,但在任何给定时间仅与3-4行相关联。当前已将for循环设置为提取与所讨论对象相关的正确数据。
在我的对象内部,我拥有的大多数数据只需要返回一个值,但是当从itemFlags中提取数据时,我需要能够在附加到该对象的数组中存储多个值
在以下屏幕截图中:https://puu.sh/E86hG/e17338f20e.png,您可以看到包含多个数据值的对象,并且标志是该对象内的空数组。我的目标是使用for循环将数据添加到该数组,但找不到正确的语法来做到这一点。您可以看到flag_count
设置为4,这意味着该对象期望将4个条目写入该嵌套标志数组。
样本数据
item_id:17
flag_id:1
flag_identifier:“标识符A”
item_id:17
flag_id:2
flag_identifier:“标识符B”
item_id:17
flag_id:3
flag_identifier:“标识符C”
item_id:24
flag_id:4
flag_identifier:“标识符D”
item_id:24
flag_id:5
flag_identifier:“标识符E”
item_id:24
flag_id:6
flag_identifier:“标识符F”
示例数据源有6种可能的数据集要导入,我们需要flag_id
和flag_identifier
。当脚本在第17条上运行时,与该item_id相关联的3组信息将被写入嵌套数组。如果我叫第24项,则将写成4、5、6,D,E,F。
答案 0 :(得分:0)
您可以使用lodash一行来完成。考虑以下代码:
const input = [
{
item_id: 17,
flag_id: 1,
flag_identifier: "identifier A"
},
{
item_id: 17,
flag_id: 2,
flag_identifier: "identifier B"
},
{
item_id: 17,
flag_id: 3,
flag_identifier: "identifier C"
},
{
item_id: 24,
flag_id: 4,
flag_identifier: "identifier D"
},
{
item_id: 24,
flag_id: 5,
flag_identifier: "identifier E"
},
{
item_id: 24,
flag_id: 6,
flag_identifier: "identifier F"
}
]
const output = _.groupBy(input, 'item_id')
/* Out for sample input would be
{
"17":[
{"item_id":17,"flag_id":1,"flag_identifier":"identifier A"},
{"item_id":17,"flag_id":2,"flag_identifier":"identifier B"},
{"item_id":17,"flag_id":3,"flag_identifier":"identifier C"}
],
"24":[
{"item_id":24,"flag_id":4,"flag_identifier":"identifier D"},
{"item_id":24,"flag_id":5,"flag_identifier":"identifier E"},
{"item_id":24,"flag_id":6,"flag_identifier":"identifier F"}
]
}
*/
答案 1 :(得分:0)
您可以将问题分为两个步骤。首先将数组中存在的相同item_id的对象分组,然后将其推入新数组。下面是该过程的简单表示。
const input = [
{
item_id: 17,
flag_id: 1,
flag_identifier: "identifier A"
},
{
item_id: 17,
flag_id: 2,
flag_identifier: "identifier B"
},
{
item_id: 17,
flag_id: 3,
flag_identifier: "identifier C"
},
{
item_id: 24,
flag_id: 4,
flag_identifier: "identifier D"
},
{
item_id: 24,
flag_id: 5,
flag_identifier: "identifier E"
},
{
item_id: 24,
flag_id: 6,
flag_identifier: "identifier F"
}];
//grouping the objects with same item_id
let data = {}
input.forEach((item) => {
const flagData = {
flag_id: item.flag_id,
flag_identifier: item.flag_identifier,
}
if (!data[item.item_id]) {
const val = {
id: item.item_id,
flags: [flagData]
};
data[item.item_id] = val;
} else {
data[item.item_id].flags = [...data[item.item_id].flags, flagData];
}
})
//pushing the grouped values in new array
let ans = [];
Object.keys(data).forEach((key) => {
ans = [...ans, data[key]];
});
/*Output would be like
[{
flags: [
0: {flag_id: 1, flag_identifier: "identifier A"}
1: {flag_id: 2, flag_identifier: "identifier B"}
2: {flag_id: 3, flag_identifier: "identifier C"}
],
id: 17,
},
{
{id: 24, flags: Array(3)}
}
*/