[英]Adding to Javascript Object Without Replacing Child
I am trying to run a for loop to create new javascript objects and add to an existing javascript object without replacing. 我正在尝试运行for循环来创建新的javascript对象并添加到现有的javascript对象而不替换。
For example I am trying to create this as the output without the group[i] being overwritten every time ( and just adding the number[i] data ): 例如,我试图创建它作为输出,而不是每次都覆盖组[i](并且只添加数字[i]数据):
{
"group1": {
"number1": "data",
"number2": "data",
"number3": "data"
},
"group2": {
"number1": "data",
"number2": "data"
}
}
My loop looks like this: 我的循环看起来像这样:
var array = [{
"groupName": "group1",
"number": "number1",
"data": "data"
}, {
"groupName": "group1",
"number": "number2",
"data": "data"
}, {
"groupName": "group1",
"number": "number3",
"data": "data"
}, {
"groupName": "group2",
"number": "number1",
"data": "data"
}, {
"groupName": "group2",
"number": "number2",
"data": "data"
}]
var groupLinks = {};
for(i = 0; i < array.length; i++) {
groupLinks[array[i].groupName] = {
[array[i].number]: array[i].data
}
As you can see with this code, my loop is only going to replace "group1" and "group2" every time. 正如您在此代码中看到的那样,我的循环每次只会替换“group1”和“group2”。
This is how I would go about approaching this: 这就是我接近这个的方法:
var array = [{ "groupName": "group1", "number": "number1", "data": "data" }, { "groupName": "group1", "number": "number2", "data": "data" }, { "groupName": "group1", "number": "number3", "data": "data" }, { "groupName": "group2", "number": "number1", "data": "data" }, { "groupName": "group2", "number": "number2", "data": "data" }]; var groupLinks = {}; array.forEach( function (element) { var groupName = element.groupName; (groupLinks[groupName] = groupLinks[groupName] || {}) [element.number] = element.data; } ); console.log(groupLinks);
here I used the ||
在这里我使用了
||
operator to create a new group when none was present, overwriting the existing groupLinks[groupName]
at each iteration, and I used a forEach
construct to loop over array elements. 运算符在不存在时创建新组,在每次迭代时覆盖现有的
groupLinks[groupName]
,并使用forEach
构造循环数组元素。
Try this: 试试这个:
var array = [{
"groupName": "group1",
"number": "number1",
"data": "data"
}, {
"groupName": "group1",
"number": "number2",
"data": "data"
}, {
"groupName": "group1",
"number": "number3",
"data": "data"
}, {
"groupName": "group2",
"number": "number1",
"data": "data"
}, {
"groupName": "group2",
"number": "number2",
"data": "data"
}]
var groupLinks = {};
array.forEach(function(el){
if(groupLinks[el.groupName]){
groupLinks[el.groupName][el.number] = el.data
}
else{
groupLinks[el.groupName] = {};
groupLinks[el.groupName][el.number] = el.data
}
});
console.log(groupLinks);
If you're not afraid of a little ES2015, this reduce job should work for you 如果你不害怕ES2015,这个减少工作应该适合你
let array = [{"groupName":"group1","number":"number1","data":"data"},{"groupName":"group1","number":"number2","data":"data"},{"groupName":"group1","number":"number3","data":"data"},{"groupName":"group2","number":"number1","data":"data"},{"groupName":"group2","number":"number2","data":"data"}]; let groupLinks = array.reduce((gl, group) => { gl[group.groupName] = Object.assign({ [group.number]: group.data }, gl[group.groupName]); return gl; }, Object.create(null)); console.log(groupLinks);
Please try this: 请试试这个:
var groupLinks = {};
for(i = 0; i < array.length; i++) {
var groupLinks2 = groupLinks[array[i].groupName];
if(!groupLinks2){
groupLinks2 ={};
var a = array[i].number;
groupLinks2[a] = array[i].data;
}else{
var a = array[i].number;
groupLinks2[a] = array[i].data;
}
groupLinks[array[i].groupName] = groupLinks2;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.