【问题标题】:concat strings from nested objects arrays从嵌套对象数组连接字符串
【发布时间】:2021-11-09 01:20:31
【问题描述】:

我需要连接所有的'externalId'(inside prod obj)+“id”(inside sup array)+“name”(inside product obj)。最好的方法是什么?我尝试过使用 map 和 reduce,但没有成功。任何帮助将不胜感激。

const jsonResultKeys = ['AAA', 'BBB', 'CCC']


const items = [];


jsonResultKeys.forEach(k => {
            const item = Jsonresult.items[k];
            items.push({
                description: item.product.name + ':' + item.product.sup[0] + ':'+ item.product.sup[0].prod.externalId ,
            })
        });

此示例的预期输出:

[ 
{ description: '4444:2:product1'},
{ description: '3333:2:product2'},
{ description: '2222:1:product3'}
]

json 对象:

const Jsonresult = {
        items: {
          'AAA': {
            createdAt: '2021-02-11T17:25:22.960-03:00',
            product: {
                sup: [{
                    prod: {
                        externalId: **4444**
                    },
                    id: **2**
                }],
                name: "**product 1**"
            },
            total: 9.84,
            quantity: 1,
            price: 15,
            updatedAt: '2021-02-11T17:25:22.960-03:00'
          },
          'BBB': {
            createdAt: '2021-02-11T17:25:22.960-03:00',
            product: {
                sup: [{
                    prod: {
                        externalId: **3333**
                    },
                    id: **2**
                }],
                name: "**product 2**"
            },
            total: 9.84,
            quantity: 1,
            price: 15,
            updatedAt: '2021-02-11T17:25:22.960-03:00'
          },
          'CCC': {
            createdAt: '2021-02-11T17:25:22.960-03:00',
            product: {
                sup: [{
                    prod: {
                        externalId: **2222**
                    },
                    id: **1**
                    
                }],
                name: "**product 3**"
            },

          }
        },
    }

【问题讨论】:

  • 您在item.product.sup[0] 的末尾缺少.id

标签: javascript arrays object


【解决方案1】:

Array#map() 方法是最合乎逻辑的方法 - 请参阅 @MichaelMano 的解决方案 - 但如果您必须使用 .push() 来填充 items (const),请坚持使用 .forEach(),如下所示:

 Object.values( Jsonresult.items ).forEach(item => {
    items.push( {description: `${item.product.sup[0].prod.externalId}:${item.product.sup[0].id}:${item.product.name}`} );
 });

演示

const items = [];

const Jsonresult = {
        items: {
          'AAA': {
            createdAt: '2021-02-11T17:25:22.960-03:00',
            product: {
                sup: [{
                    prod: {
                        externalId: 4444
                    },
                    id: 2
                }],
                name: "product 1"
            },
            total: 9.84,
            quantity: 1,
            price: 15,
            updatedAt: '2021-02-11T17:25:22.960-03:00'
          },
          'BBB': {
            createdAt: '2021-02-11T17:25:22.960-03:00',
            product: {
                sup: [{
                    prod: {
                        externalId: 3333
                    },
                    id: 2
                }],
                name: "product 2"
            },
            total: 9.84,
            quantity: 1,
            price: 15,
            updatedAt: '2021-02-11T17:25:22.960-03:00'
          },
          'CCC': {
            createdAt: '2021-02-11T17:25:22.960-03:00',
            product: {
                sup: [{
                    prod: {
                        externalId: 2222
                    },
                    id: 1
                    
                }],
                name: "product 3"
            },

          }
        },
    };
    
 Object.values( Jsonresult.items ).forEach(item => {
      items.push( {description: `${item.product.sup[0].prod.externalId}:${item.product.sup[0].id}:${item.product.name}`} );
 });
 
    
    console.log( items );

【讨论】:

  • 我的 Jsonresult obj 没有排序,所以 sup[0] 不起作用。
  • 您能否解释一下您的意思,或者发布正确的 JSON。
【解决方案2】:

您可以执行以下操作,映射结果并返回一个对象,这将创建一个对象数组。

你甚至不需要钥匙。

const map = Object.values(Jsonresult.items).map((item) => {
    return {
        description: `${item.product.sup[0].prod.externalId}:${item.product.sup[0].id}:${item.product.name}`,
    };
});
[
  { description: '4444:2:product 1' },
  { description: '3333:2:product 2' },
  { description: '2222:1:product 3' }
]

【讨论】:

  • tks @Michael 。但我需要将返回值推送到数组“items”变量中。我该怎么做?
猜你喜欢
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2020-03-23
  • 2020-01-04
相关资源
最近更新 更多