Javascript 如何仅将特定的键值对从一个对象添加到另一个对象?
假设Javascript 如何仅将特定的键值对从一个对象添加到另一个对象?,javascript,Javascript,假设 obj1 = 0: { description: "", holiday: false, id: "", isWeekend: false, percent: 0, pmDescription: "", pmHours: 0, productivity: 0, projectName: "rgffgfg", sowId: "7396", time: 1591641000000, userH
obj1 =
0: {
description: "",
holiday: false,
id: "",
isWeekend: false,
percent: 0,
pmDescription: "",
pmHours: 0,
productivity: 0,
projectName: "rgffgfg",
sowId: "7396",
time: 1591641000000,
userHours: 0,
userName: "hemant tripathi",
wfh: false,
},
1: {
description: "",
holiday: false,
id: "",
isWeekend: false,
percent: 0,
pmDescription: "",
pmHours: 0,
productivity: 0,
projectName: "rgffgfg",
sowId: "7396",
time: 1591641000000,
userHours: 0,
userName: "hemant tripathi",
wfh: false,
}
2: {
description: "",
holiday: false,
id: "",
isWeekend: false,
percent: 0,
pmDescription: "",
pmHours: 0,
productivity: 0,
projectName: "rgffgfg",
sowId: "7396",
time: 1591641000000,
userHours: 0,
userName: "hemant tripathi",
wfh: false,
}
obj2: {}
我只想在obj2中添加3个键值对。
我想循环访问obj1。在obj2中只添加3个键值对('description','userHours','userName')。我想添加这3个键值对。我们怎样才能做到这一点呢?您可以这样分配值
让obj1=[{
说明:“,
假期:假,
id:“”,
周末:错,
百分比:0,
pmd说明:“,
时间:0,,
生产力:0,
项目名称:“rgffgfg”,
索维德:“7396”,
时间:1591641000000,
用户小时数:0,
用户名:“hemant tripathi”,
wfh:错,
}, {
说明:“,
假期:假,
id:“”,
周末:错,
百分比:0,
pmd说明:“,
时间:0,,
生产力:0,
项目名称:“rgffgfg”,
索维德:“7396”,
时间:1591641000000,
用户小时数:0,
用户名:“hemant tripathi”,
wfh:错,
}, {
说明:“,
假期:假,
id:“”,
周末:错,
百分比:0,
pmd说明:“,
时间:0,,
生产力:0,
项目名称:“rgffgfg”,
索维德:“7396”,
时间:1591641000000,
用户小时数:0,
用户名:“hemant tripathi”,
wfh:错,
}]
设obj2=[]
obj1.forEach(o=>{
obj2.push({
描述:o.描述,
userHours:o.userHours,
用户名:o.userName
})
})
log(obj2)
假设您需要允许对象中的某些键,那么您可以创建一个包含需要映射到列表acceptedKey中的任何键的列表
var acceptedKey=[“Id”、“description”、“holiday”]
用于(obj1中的var键)
{
if(接受密钥。包括(密钥))
{
var newDict=[];
newDict.push(键:键,
值:obj1[键])
}
}您可以迭代
obj1
并使用所需的键映射新数组obj2
const obj2 = obj1.map((val) => ({
'userName': val.userName,
'userHours': val.userHours,
'description': val.description,
}))
console.log(obj2)
这将把您的对象数组复制到另一个对象数组中,其中只包括您想要的键
const source1 = {
key1: "value1_s1",
key2: "value2_s1",
key3: "value3_s1"
// ...
}
const source2 = {
key1: "value1_s2",
key2: "value2_s2",
key3: "value3_s2"
// ...
}
const objArr = [source1, source2]; // ...
const keysToCopy = ["key1", "key2"]; // ...
const destObjArr = objArr.map(o => Object.assign({}, Object.keys(o).reduce((obj, k) => {
if(keysToCopy.includes(k)) obj[k] = o[k];
return obj;
}, {}) ));
console.log(destObjArr);
/* Outputs
[{
key1: "value1_s1",
key2: "value2_s1"
}, {
key1: "value1_s2",
key2: "value2_s2"
}]
*/
现在我们需要在多个对象之间循环,怎么样?是的,对象数组。谢谢。这真的很有帮助。当我们必须在多个对象之间循环时,我们该怎么做呢?编辑了question@UmangMehra我已经更新了支持对象数组的代码。通常不鼓励只粘贴代码而不做解释。请编辑您的答案以解释您的解决方案。
const source1 = {
key1: "value1_s1",
key2: "value2_s1",
key3: "value3_s1"
// ...
}
const source2 = {
key1: "value1_s2",
key2: "value2_s2",
key3: "value3_s2"
// ...
}
const objArr = [source1, source2]; // ...
const keysToCopy = ["key1", "key2"]; // ...
const destObjArr = objArr.map(o => Object.assign({}, Object.keys(o).reduce((obj, k) => {
if(keysToCopy.includes(k)) obj[k] = o[k];
return obj;
}, {}) ));
console.log(destObjArr);
/* Outputs
[{
key1: "value1_s1",
key2: "value2_s1"
}, {
key1: "value1_s2",
key2: "value2_s2"
}]
*/