[英]Javascript flatten deeply nested Array with objects and renaming properties
[英]Renaming object properties in an array of objects
我有以下结构:
const data = {
invoices: [
{
Date: "2018-12-18T00:00:00.000Z",
InvoiceNumber: "59"
},
{
Date: "2018-12-18T00:00:00.000Z",
InvoiceNumber: "59"
}
]
};
我想将 InvoiceNumber 的所有实例重命名为 CreditNoteNumber 以提供以下信息:
const data = {
invoices: [
{
Date: "2018-12-18T00:00:00.000Z",
CreditNoteNumber: "59"
},
{
Date: "2018-12-18T00:00:00.000Z",
CreditNoteNumber: "59"
}
]
};
例如,我尝试了以下各种方法:
var changed = data.invoices.map(function(item) {
return {
...data.invoices,
CreditNoteNumber: item.InvoiceNumber
};
});
然而,价差将 CreditNoteNumber 推到对象之外。
只需使用解构并重命名
const data = { invoices: [ { Date: "2018-12-18T00:00:00.000Z", InvoiceNumber: "59" }, { Date: "2018-12-18T00:00:00.000Z", InvoiceNumber: "59" } ] }; var changed = data.invoices.map( ({ Date, InvoiceNumber: CreditNoteNumber }) => ({ Date, CreditNoteNumber }) ); console.log(changed);
JavaScript 中没有“重命名”属性这样的操作。
您需要删除不再希望保留的财产:
const data = { invoices: [ { Date: "2018-12-18T00:00:00.000Z", InvoiceNumber: "59" }, { Date: "2018-12-18T00:00:00.000Z", InvoiceNumber: "59" } ] }; const changed = data.invoices.map(item => { const obj = { ...item, CreditNoteNumber: item.InvoiceNumber }; delete obj.InvoiceNumber return obj }); console.log(changed)
var changed = data.invoices.map(function(item) {
return {
Date: item.Date,
CreditNoteNumber: item.InvoiceNumber
};
});
您可以将函数map
与函数Object.assign
一起使用,如下所示:
以下方法不会改变原始对象
const data = {invoices: [{Date: "2018-12-18T00:00:00.000Z",InvoiceNumber: "59"},{Date: "2018-12-18T00:00:00.000Z",InvoiceNumber: "59"}]}, result = data.invoices.map(({InvoiceNumber: CreditNoteNumber, ...items}) => Object.assign({}, items, {CreditNoteNumber})); console.log(result);
如果你想改变原始对象,你可以使用forEach
代替:
const data = {invoices: [{Date: "2018-12-18T00:00:00.000Z",InvoiceNumber: "59"},{Date: "2018-12-18T00:00:00.000Z",InvoiceNumber: "59"}]}; data.invoices.forEach((item) => { item.CreditNoteNumber = item.InvoiceNumber; delete item.InvoiceNumber; }); console.log(data);
最好的选择是创建一个具有属性 item.CreditNoteNumber 的新对象,并使用 for each 循环来迭代并将值重新分配给新对象。
创建新对象后,将新对象分配给原始对象 data.invoices。
const data = {invoices: [{Date: "2018-12-18T00:00:00.000Z",InvoiceNumber: "59"},{Date: "2018-12-18T00:00:00.000Z",InvoiceNumber: "59"}]};
var newInvoices = [];
data.invoices.forEach((item) => {
let invoice = {};
invoice.Date = item.Date;
invoice.CreditNoteNumber = item.InvoiceNumber;
newInvoice.push(invoice);
});
data.invoices = newInvoices;
console.log(data.invoices);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.