如何比较Angular中两个JSON文件的内容并达到以下结果:
假设我有一个 default.json 文件,如下所示:
default.json
{
"name": "John"
"age": 30,
"car1": "Ford"
"car2": "BMW"
"car3": "Fiat"
}
和另一个 specific.json 文件,如下所示:
specific.json
{
"name": "Doe",
"car1": "Tesla",
"car4": "Mercedes"
}
default.json 始终包含所有可能的键以及 specific.json 的键,应该被覆盖和其他键,这些键不包含在 default.json 中(在我的示例中为“ car4”)。
现在应该通过比较检查以下内容:
如果特定键(在我的示例中为“ name”和“ car1”)在 specific.json 中的值与在 default.json 中使用相同的密钥,则应覆盖并使用这些值。否则,始终使用 default.json 中的默认值和 specific.json 中的其他值>当然是(在我的示例中是“ car4”)。
最后应同时使用两个文件,因此,specific.json仅用作default.json的更新或扩展。我在Angular应用程序中需要此功能,在这里我必须比较两个JSON文件,然后使用ngx-translate库根据应用程序的特定业务案例提供特定的翻译。如果需要,也请检查我有关此主题的问题:Translations based on specific keys in custom JSON files and business cases with ngx-translate (Angular 7)
我希望我能很好地解释它:)
答案 0 :(得分:1)
这与Angular无关,但与JS有关。
下面的示例说明如何使用对象。
let def = {
"name": "John",
"age": 30,
"car1": "Ford",
"car2": "BMW",
"car3": "Fiat"
};
let specific = {
"name": "Doe",
"car1": "Tesla",
"car4": "Mercedes"
}
function compose(def, spec) {
return Object.assign(def, spec);
}
console.log(compose(def, specific));
输出:
/*
{
name: 'Doe',
age: 30,
car1: 'Tesla',
car2: 'BMW',
car3: 'Fiat',
car4: 'Mercedes'
}
*/
答案 1 :(得分:1)
使用es6传播运算符合并(并覆盖)对象
const defaultObj = {
name: 'John',
age: 30,
car1: 'Ford',
car2: 'BMW',
car3: 'Fiat'
};
const specificObj = {
name: 'Doe',
car1: 'Tesla',
car4: 'Mercedes'
}
console.log({ ...defaultObj, ...specificObj });