繁体   English   中英

重命名对象数组中的对象属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM