Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以相同名称连接json条目_Javascript_Java_Arrays_Json - Fatal编程技术网

Javascript 以相同名称连接json条目

Javascript 以相同名称连接json条目,javascript,java,arrays,json,Javascript,Java,Arrays,Json,我目前正在尝试学习javascript的基础知识并使用JSON 我有一个JSON文件,其中我想将相同名称的导入合并到一个条目中。那怎么可能呢 原始JSON [{ "name": "1.date.17-Nov-18", "size": 1000, "imports": ["1.location.HOUSTON", "1.person.JOHN"] }, {

我目前正在尝试学习javascript的基础知识并使用JSON

我有一个JSON文件,其中我想将相同名称的导入合并到一个条目中。那怎么可能呢

原始JSON

[{
    "name": "1.date.17-Nov-18",
    "size": 1000,
    "imports": ["1.location.HOUSTON", "1.person.JOHN"]
},
{
    "name": "1.date.17-Nov-18",
    "size": 1000,
    "imports": ["1.location.MIAMI", "1.person.BEN", "1.person.JOHN"]
},
{
    "name": "1.date.18-Nov-18",
    "size": 1000,
    "imports": ["1.location.UBER", "1.person.JOHN"]
}
]
预期产出

[{
    "name": "1.date.17-Nov-18",
    "size": 1000,
    "imports": ["1.location.HOUSTON", "1.person.JOHN", "1.location.MIAMI", "1.person.BEN"]
},
{
    "name": "1.date.18-Nov-18",
    "size": 1000,
    "imports": ["1.location.UBER", "1.person.JOHN"]
}
]

如有任何提示和建议,将不胜感激。非常感谢。

使用对象跟踪名称,我们使用
forEach
遍历数据数组

然后,我们检查
名称
之前是否已传递。如果它已通过,我们将它们的
导入
合并在一起。如果没有,我们将该项添加到对象中

为了防止重复的
导入
,我们使用防止重复的元素,然后使用spread
操作符将其转换回数组

然后我们使用
Object.values
返回合并数据,而不使用
名称作为键

constresult={};
const data=[{“name”:“1.date.17-11-18”,“size”:1000,“imports”:[“1.location.HOUSTON”,“1.person.JOHN”],{“name”:“1.date.17-11-18”,“size”:1000,“imports”:[“1.location.MIAMI”,“1.person.BEN”,“1.person.JOHN”],{“name”:“1.date.18-11-18”,“size”:1000,“imports”:“1.location.location.UBER.UBER”,“1.person.JOHN”];
data.forEach(项=>{
如果(结果中的item.name)结果[item.name].imports=[…新集合([…item.imports,…结果[item.name].imports]);
else结果[项目名称]=项目;
});
console.log(Object.values(result))您可以这样尝试

const data=[{“name”:“1.date.17-Nov-18”,“size”:1000,“imports”:[“1.location.HOUSTON”,“1.person.JOHN”],{“name”:“1.date.17-Nov-18”,“size”:1000,“imports”:[“1.location.MIAMI”,“1.person.BEN”,“1.person.JOHN”],{“name”:“1.date.11-18”,“size”:1000,“imports”:[“1.location.location.UBER.UBER”,“1.person.JOHN”];
const result=data.reduce((acc,{name,size,imports})=>{
acc[name]=acc[name]|{name:name,size:size,imports:[]};
acc[name].imports=[…新集合([…acc[name].imports,…imports]);
返回acc;
}, {})
console.log(Object.values(result))

.as控制台包装{min height:100%!important;top:0}
您可以使用
数组.prototype.reduce解决此问题。当你开始学习JS时,我会更仔细地写下答案。试试这个-

const数据=[{
“名称”:“1.日期18年11月17日”,
“尺寸”:1000,
“进口”:[“1.地点.休斯顿”,“1.个人.约翰”]
},
{
“名称”:“1.日期18年11月17日”,
“尺寸”:1000,
“进口”:[“1.地点.迈阿密”,“1.个人.本”,“1.个人.约翰”]
},
{
“名称”:“1.日期:2018年11月18日”,
“尺寸”:1000,
“导入”:[“1.location.UBER”,“1.person.JOHN”]
}];
让res=数据。减少((acc,curr)=>{
if(会计科目[当前名称]==未定义){
//如果不存在,则取原始的当前对象
会计科目[当前名称]=当前;
}否则{
//如果存在,则将当前导入推送到以前的导入
acc[curr.name].imports.push(…curr.imports);
}
返回acc;
}, {});
//将对象转换为数组。
res=对象值(res);
控制台日志(res)

.as控制台包装{最小高度:100%!重要;顶部:0}
将数组缩小为
映射
,然后使导入唯一

const数据=[
{
名称:“1.日期:2018年11月17日”,
尺寸:1000,
导入:['1.location.HOUSTON','1.person.JOHN'],
},
{
名称:“1.日期:2018年11月17日”,
尺寸:1000,
导入:['1.location.MIAMI','1.person.BEN','1.person.JOHN'],
},
{
名称:“1.日期:2018年11月18日”,
尺寸:1000,
导入:['1.location.UBER','1.person.JOHN'],
},
];
console.log(
Array.from(data.reduce)(m,o)=>(
m、 has(o.name)
?m.get(o.name).imports.push(…o.imports)
:m.set(o.name,{…o}),
m) ,新映射())。值(),
(v) =>({…v,导入:[…新集合(v.imports)]})

);如果导入条目同时出现在不同的键上,则会重复导入条目。有没有办法让它只出现一次?@feverretiate检查编辑器是否按预期工作。非常感谢你!问题是,
导入
需要具有唯一的元素。查看OP的预期结果。我已使用更新了我的答案以获取唯一项。请看一看。谢谢@SomShekharMukherjeeYa现在一切正常+1.