[英]JavaScript - How to change object keys in an array of object?
我有一个对象数组:
let data = [
{ "date" : "17/03/2022", "count" : 2, "james@email.net" : 2 },
{
"date" : "17/05/2022",
"count" : 2,
"admin@email.com" : 1,
"secretary@email.uk" : 1
},
{ "date" : "17/07/2022", "count" : 7, "staff@email.us" : 7 },
];
我想删除对象键中的“@”而不是电子邮件地址。
这是预期的输出:
// Expected output:
data = [
{ "date" : "17/03/2022", "count" : 2, "james" : 2 },
{
"date" : "17/05/2022",
"count" : 2,
"admin" : 1,
"secretary" : 1
},
{ "date" : "17/07/2022", "count" : 7, "staff" : 7 },
];
笔记:
我已经尝试过,但还没有成功:
for (let i = 0; i < data.length; i++) {
let keys = Object.keys(data[i]);
console.log(`key-${i+1} :`, keys); // [ 'date', 'count', 'admin@email.com', 'secretary@email.uk' ]
let emails = keys.filter(index => index.includes("@"));
console.log(`email-${i+1} :`, emails); // [ 'admin@email.com', 'secretary@email.uk' ]
let nameList = [];
for (let i = 0; i < emails.length; i++) {
let name = emails[i].split("@")[0];
nameList.push(name);
}
console.log(`name-${i+1} :`, nameList); // [ 'admin', 'secretary' ]
}
提前致谢。
您可以创建一个函数,该函数在@
处拆分对象键的键,并使用Object.fromEntries()
创建一个新对象。
这是一个片段:
const data = [{date:"17/03/2022",count:2,"james@email.net":2},{date:"17/05/2022",count:2,"admin@email.com":1,"secretary@email.uk":1},{date:"17/07/2022",count:7,"staff@email.us":7}]; const converter = o => Object.fromEntries( Object.entries(o).map(([k, v]) => [k.split("@")[0], v]) ) console.log( data.map(converter) )
如果不支持Object.fromEntries()
,您可以使用一个简单的循环遍历数组,然后每个对象创建新对象,如下所示:
const output = []
for (const o of data) {
const updated = {}
for (const key in o) {
updated[key.split("@")[0]] = o[key]
}
output.push(updated)
}
尽可能简单地尝试这个:
let data = [{ "date": "17/03/2022", "count": 2, "james@email.net": 2 }, { "date": "17/05/2022", "count": 2, "admin@email.com": 1, "secretary@email.uk": 1 }, { "date": "17/07/2022", "count": 7, "staff@email.us": 7 }, ]; data.map((el, i) => { Object.keys(el).map(e => { if(e.includes('@')){ data[i][e.slice(0, e.indexOf('@'))] = data[i][e]; delete data[i][e]; } }) }); console.log(data);
你能试试用这个吗?
for (let i = 0; i < data.length; i++) {
let element = data[i];
let keys = Object.keys(element);
let emails = keys.filter(index => index.includes("@"));
for (let j = 0; j < emails.length; j++) {
let name = emails[j].split("@")[0];
let value = element[emails[j]];
Object.defineProperty(element, name, { value });
delete element[emails[j]];
}
}
console.log(data);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.