将两个 Javascript 对象合并为一个具有相同键的对象
Combine two Javascript Objects into one Object with same keys
我需要帮助将两个具有相同键的对象组合成一个对象。我从 api 请求中获取这些对象。
我的第一个对象:
var obj1 = {
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "",
RefinableString21: "",
RefinableString22: "",
RefinableString23: "",
RefinableString24: "",
RefinableString25: ""
}
我的第二个对象:
var obj2 = {
RefinableString15: "",
RefinableString16: "",
RefinableString17: "",
RefinableString19: "",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
}
我希望它最后看起来像这样:
{
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
}
我试过 Object.assign,但它对我的问题不起作用。
var obj1 = {
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "",
RefinableString21: "",
RefinableString22: "",
RefinableString23: "",
RefinableString24: "",
RefinableString25: ""
}
var obj2 = {
RefinableString15: "",
RefinableString16: "",
RefinableString17: "",
RefinableString19: "",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
}
function merge(object1, object2) {
const keys = Object.keys(object1);
return keys.reduce((result, item) => {
result[item] = object1[item] || object2[item];
return result;
}, {})
}
console.log(merge(obj1, obj2))
您需要清理空属性并合并两个对象。类似的东西
function clean(obj) {
for (const propName in obj) {
if (
obj[propName] === '' ||
obj[propName] === null ||
obj[propName] === undefined
) {
delete obj[propName];
}
}
return obj;
}
const result = {...clean(obj1),...clean(obj2)};
使用 forEach
循环并构建一个对象,其中值仅推送非空字符串。
var obj1 = {
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "",
RefinableString21: "",
RefinableString22: "",
RefinableString23: "",
RefinableString24: "",
RefinableString25: ""
};
var obj2 = {
RefinableString15: "",
RefinableString16: "",
RefinableString17: "",
RefinableString19: "",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
};
const res = {};
Object.keys(obj1).forEach(key => (res[key] = obj1[key] || obj2[key]));
console.log(res);
我已经这样做了:
var obj1 =
{ RefinableString15: "Claims"
, RefinableString16: "2123"
, RefinableString17: "New York Cyberstate"
, RefinableString19: "Global Property"
, RefinableString20: ""
, RefinableString21: ""
, RefinableString22: ""
, RefinableString23: ""
, RefinableString24: ""
, RefinableString25: ""
}
var obj2 =
{ RefinableString15: ""
, RefinableString16: ""
, RefinableString17: ""
, RefinableString19: ""
, RefinableString20: "Test"
, RefinableString21: "Red"
, RefinableString22: "Test"
, RefinableString23: "Red"
, RefinableString24: "Test"
, RefinableString25: "Green"
}
const cleanObj = o => Object.entries(o).reduce((a,[k,v])=>{if(v!='') a[k]=v;return a}, {})
var obj3 = { ...obj1, ...cleanObj(obj2) }
console.log ( obj3 )
.as-console-wrapper { max-height: 100% !important; top: 0; }
我需要帮助将两个具有相同键的对象组合成一个对象。我从 api 请求中获取这些对象。
我的第一个对象:
var obj1 = {
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "",
RefinableString21: "",
RefinableString22: "",
RefinableString23: "",
RefinableString24: "",
RefinableString25: ""
}
我的第二个对象:
var obj2 = {
RefinableString15: "",
RefinableString16: "",
RefinableString17: "",
RefinableString19: "",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
}
我希望它最后看起来像这样:
{
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
}
我试过 Object.assign,但它对我的问题不起作用。
var obj1 = {
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "",
RefinableString21: "",
RefinableString22: "",
RefinableString23: "",
RefinableString24: "",
RefinableString25: ""
}
var obj2 = {
RefinableString15: "",
RefinableString16: "",
RefinableString17: "",
RefinableString19: "",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
}
function merge(object1, object2) {
const keys = Object.keys(object1);
return keys.reduce((result, item) => {
result[item] = object1[item] || object2[item];
return result;
}, {})
}
console.log(merge(obj1, obj2))
您需要清理空属性并合并两个对象。类似的东西
function clean(obj) {
for (const propName in obj) {
if (
obj[propName] === '' ||
obj[propName] === null ||
obj[propName] === undefined
) {
delete obj[propName];
}
}
return obj;
}
const result = {...clean(obj1),...clean(obj2)};
使用 forEach
循环并构建一个对象,其中值仅推送非空字符串。
var obj1 = {
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "",
RefinableString21: "",
RefinableString22: "",
RefinableString23: "",
RefinableString24: "",
RefinableString25: ""
};
var obj2 = {
RefinableString15: "",
RefinableString16: "",
RefinableString17: "",
RefinableString19: "",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
};
const res = {};
Object.keys(obj1).forEach(key => (res[key] = obj1[key] || obj2[key]));
console.log(res);
我已经这样做了:
var obj1 =
{ RefinableString15: "Claims"
, RefinableString16: "2123"
, RefinableString17: "New York Cyberstate"
, RefinableString19: "Global Property"
, RefinableString20: ""
, RefinableString21: ""
, RefinableString22: ""
, RefinableString23: ""
, RefinableString24: ""
, RefinableString25: ""
}
var obj2 =
{ RefinableString15: ""
, RefinableString16: ""
, RefinableString17: ""
, RefinableString19: ""
, RefinableString20: "Test"
, RefinableString21: "Red"
, RefinableString22: "Test"
, RefinableString23: "Red"
, RefinableString24: "Test"
, RefinableString25: "Green"
}
const cleanObj = o => Object.entries(o).reduce((a,[k,v])=>{if(v!='') a[k]=v;return a}, {})
var obj3 = { ...obj1, ...cleanObj(obj2) }
console.log ( obj3 )
.as-console-wrapper { max-height: 100% !important; top: 0; }