用其他 json 个文件中的对象替换字符串
replace strings with object from other json files
我有 3 个 json 个文件:
- sources.json
- destination_level1.json
- destination_level0.json(最终文件)
我想 "merge" 通过替换匹配的字符串来 "merge" 所有这些文件,例如
destination_level0 -> destination_level1 -> 来源
换句话说:"Check the keys in destination_level0 e.g. "Element1",转到 destination_level1 并查找匹配的对象并将 destination_level0 中的 Element1 替换为该对象。"从 destination_level1 到来源也是如此。
来源可能如下所示:
{"john": ["A","B"],"mike": ["123","234","345"],"doe": ["abc","cde"],"ann": {"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]}}
destination_level_1 像这样:
{"Element1": ["john","ann","john","john","doe","mike"],"Element2": ["ann","mike","ann","doe","doe","doe","ann"],"Element3": ["ann","doe","ann"]}
和destination_level_0像这样:
{"FinalA": ["Element1","Element2","Element1","Element2","Element2"],"FinalB": ["Element2","Element2","Element2","Element1"]}
最终结果应该是这样的:
{"FinalA": [[["A","B"],{"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]},...
我尝试了一些 lodash 和下划线,但卡住了。
有什么想法吗?
纯粹JavaScript
var sources = {"john": ["A","B"],"mike": ["123","234","345"],"doe": ["abc","cde"],"ann": {"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]}};
var destination_level_0 = {"FinalA": ["Element1","Element2","Element1","Element2","Element2"],"FinalB": ["Element2","Element2","Element2","Element1"]};
var destination_level_1 = {"Element1": ["john","ann","john","john","doe","mike"],"Element2": ["ann","mike","ann","doe","doe","doe","ann"],"Element3": ["ann","doe","ann"]};
var final = {};
for(var key in destination_level_0){
var preFinal = [];
var elems = destination_level_0[key];
for(var i in elems){
var elem = elems[i];
var names = destination_level_1[elem];
for(var j in names){
var name = names[j];
var finalItem = sources[name];
preFinal.push(finalItem);
}
}
final[key] = preFinal;
}
console.log(final);
console.log(JSON.stringify(final));
使用 Array#.map
inside Array#map
(or lodash's _.map()
从 level0 => level1 => level2 映射一个项目):
var level0 = {"FinalA": ["Element1","Element2","Element1","Element2","Element2"],"FinalB": ["Element2","Element2","Element2","Element1"]};
var level1 = {"Element1": ["john","ann","john","john","doe","mike"],"Element2": ["ann","mike","ann","doe","doe","doe","ann"],"Element3": ["ann","doe","ann"]};
var level2 = {"john": ["A","B"],"mike": ["123","234","345"],"doe": ["abc","cde"],"ann": {"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]}}
;
var result = Object.keys(level0).reduce(function(r, key) {
r[key] = level0[key].map(function(element) {
return level1[element].map(function(item) {
return level2[item];
});
})
return r;
}, Object.create(null));
console.log(JSON.stringify(result));
我有 3 个 json 个文件:
- sources.json
- destination_level1.json
- destination_level0.json(最终文件)
我想 "merge" 通过替换匹配的字符串来 "merge" 所有这些文件,例如
destination_level0 -> destination_level1 -> 来源
换句话说:"Check the keys in destination_level0 e.g. "Element1",转到 destination_level1 并查找匹配的对象并将 destination_level0 中的 Element1 替换为该对象。"从 destination_level1 到来源也是如此。
来源可能如下所示:
{"john": ["A","B"],"mike": ["123","234","345"],"doe": ["abc","cde"],"ann": {"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]}}
destination_level_1 像这样:
{"Element1": ["john","ann","john","john","doe","mike"],"Element2": ["ann","mike","ann","doe","doe","doe","ann"],"Element3": ["ann","doe","ann"]}
和destination_level_0像这样:
{"FinalA": ["Element1","Element2","Element1","Element2","Element2"],"FinalB": ["Element2","Element2","Element2","Element1"]}
最终结果应该是这样的:
{"FinalA": [[["A","B"],{"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]},...
我尝试了一些 lodash 和下划线,但卡住了。
有什么想法吗?
纯粹JavaScript
var sources = {"john": ["A","B"],"mike": ["123","234","345"],"doe": ["abc","cde"],"ann": {"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]}};
var destination_level_0 = {"FinalA": ["Element1","Element2","Element1","Element2","Element2"],"FinalB": ["Element2","Element2","Element2","Element1"]};
var destination_level_1 = {"Element1": ["john","ann","john","john","doe","mike"],"Element2": ["ann","mike","ann","doe","doe","doe","ann"],"Element3": ["ann","doe","ann"]};
var final = {};
for(var key in destination_level_0){
var preFinal = [];
var elems = destination_level_0[key];
for(var i in elems){
var elem = elems[i];
var names = destination_level_1[elem];
for(var j in names){
var name = names[j];
var finalItem = sources[name];
preFinal.push(finalItem);
}
}
final[key] = preFinal;
}
console.log(final);
console.log(JSON.stringify(final));
使用 Array#.map
inside Array#map
(or lodash's _.map()
从 level0 => level1 => level2 映射一个项目):
var level0 = {"FinalA": ["Element1","Element2","Element1","Element2","Element2"],"FinalB": ["Element2","Element2","Element2","Element1"]};
var level1 = {"Element1": ["john","ann","john","john","doe","mike"],"Element2": ["ann","mike","ann","doe","doe","doe","ann"],"Element3": ["ann","doe","ann"]};
var level2 = {"john": ["A","B"],"mike": ["123","234","345"],"doe": ["abc","cde"],"ann": {"abc": ["yxc","xcv","cvb"],"bcd": ["poi","iuz","uzt"]}}
;
var result = Object.keys(level0).reduce(function(r, key) {
r[key] = level0[key].map(function(element) {
return level1[element].map(function(item) {
return level2[item];
});
})
return r;
}, Object.create(null));
console.log(JSON.stringify(result));