我正在使用两个对象data
和map
,其中我需要使用data
text
值来更新map
对象的键。 1}}对象基于data
的键与datafield
对象中map
键的值匹配。
data = [{
1230c9299007b07bf73bb396: "Current",
5900c9299007b07bf73bb3a0: "Will",
5900c9299007b07bf73bb39f: "Johnson"
}, {
1230c9299007b07bf73bb396: "Current",
5900c9299007b07bf73bb3a0: "Donna",
5900c9299007b07bf73bb39f: "Sampson"
}, {
1230c9299007b07bf73bb396: "Past",
5900c9299007b07bf73bb3a0: "Frank",
5900c9299007b07bf73bb39f: "Lloyd"
}];
map = [{
dataField: "1230c9299007b07bf73bb396",
text: "Customer Type"
}, {
dataField: "5900c9299007b07bf73bb3a0",
text: "First Name"
}, {
dataField: "5900c9299007b07bf73bb39f",
text: "Last Name"
}];
预期结果:
result = [{
"Customer Type": "Current",
"First Name": "Will",
"Last Name": "Johnson"
}, {
"Customer Type": "Current",
"First Name": "Donna",
"Last Name": "Sampson"
}, {
"Customer Type": "Past",
"First Name": "Frank",
"Last Name": "Lloyd"
}];
我尝试使用以下代码来查找两个对象合并,并且不按预期更新任何对象键:
let items = Object.keys(data).map((key) => {
const newKey = map[key] || key;
return { [newKey] : data[key] };
});
答案 0 :(得分:3)
瞧。
var data = [{
"1230c9299007b07bf73bb396": "Current",
"5900c9299007b07bf73bb3a0": "Will",
"5900c9299007b07bf73bb39f": "Johnson"
}, {
"1230c9299007b07bf73bb396": "Current",
"5900c9299007b07bf73bb3a0": "Donna",
"5900c9299007b07bf73bb39f": "Sampson"
}, {
"1230c9299007b07bf73bb396": "Past",
"5900c9299007b07bf73bb3a0": "Frank",
"5900c9299007b07bf73bb39f": "Lloyd"
}];
var map = [{
dataField: "1230c9299007b07bf73bb396",
text: "Customer Type"
}, {
dataField: "5900c9299007b07bf73bb3a0",
text: "First Name"
}, {
dataField: "5900c9299007b07bf73bb39f",
text: "Last Name"
}];
let items = data.map(object => {
let newObj = {};
map.forEach(prop => newObj[prop.text] = object[prop.dataField]);
return newObj;
});
console.log(items);
希望答案
答案 1 :(得分:2)
你走了:
const pre = document.getElementById('pre');
const data = [{
'1230c9299007b07bf73bb396': "Current",
'5900c9299007b07bf73bb3a0': "Will",
'5900c9299007b07bf73bb39f': "Johnson"
},
{
'1230c9299007b07bf73bb396': "Current",
'5900c9299007b07bf73bb3a0': "Donna",
'5900c9299007b07bf73bb39f': "Sampson"
},
{
'1230c9299007b07bf73bb396': "Past",
'5900c9299007b07bf73bb3a0': "Frank",
'5900c9299007b07bf73bb39f': "Lloyd"
}
];
const map = [{
dataField: "1230c9299007b07bf73bb396",
text: "Customer Type"
}, {
dataField: "5900c9299007b07bf73bb3a0",
text: "First Name"
}, {
dataField: "5900c9299007b07bf73bb39f",
text: "Last Name"
}];
const fieldToText = map.reduce((result, el) => {
result[el.dataField] = el.text;
return result
}, []);
const result = data.map((el) => {
return Object.entries(el).reduce((result, [key, value]) => {
result[fieldToText[key]] = value;
return result;
}, {});
});
pre.innerHTML = JSON.stringify(result, null, 2);

<pre id="pre"></pre>
&#13;
答案 2 :(得分:0)
首先建立一个数字 - 关键地图:
const keys = new Map(map.map({dataField, text}) => ([dataField, text])));
现在,您可以通过迭代构建新对象的所有键值对来将每个数据条目映射到新对象:
const result = data.map(obj => {
const tmp = {};
for(const [key, value] of Object.entries(obj)){
tmp[keys.get(key) || "_"] = value;
}
return tmp;
});