【问题标题】:how to merge array to the json to form a expected result如何将数组合并到 json 以形成预期的结果
【发布时间】:2016-06-08 14:00:17
【问题描述】:

我有一个 JSON 数组:

var row={ shopId: 3, shopName: '1', address: 'abc', contactNumber: 1234 }

我有一个数组:

var data= [ { imageId: 1, shopId: 3, imageUrl: 'aaa' },
            { imageId: 2, shopId: 3, imageUrl: 'bbb' } ]

我必须将这两者合并并生成如下输出:

var result = {
    shopId: 3,
    shopName: '1',
    address: 'abc',
    contactNumber: 1234,
    image: [{
        imageId: 1,
        shopId: 3,
        imageUrl: 'aaa'
    }, {
        imageId: 2,
        shopId: 3,
        imageUrl: 'bbb'
    }]
}

【问题讨论】:

  • 你不能只做row.image = data;吗?
  • 结果应该是一个新对象吗?是数组的行的一部分,并且在数据中不止一个具有相同 shopid 的商品?
  • 您似乎正在尝试创建一个“商店”对象,该对象还包含与该商店关联的图像列表。如果是这样,那么您的“数据”数组看起来只包含具有相同“shopId”值的项目。是否有保证,或者您是否需要像 Jose 所建议的那样过滤“数据”数组?另外,为什么你需要你的结果“image”数组来包含“shopId”值?这是从其父对象“shopId”假定的。

标签: javascript arrays json node.js express


【解决方案1】:

只需将您的data 分配给row.image,如下所示:

var row = {
  shopId: 3,
  shopName: '1',
  address: 'abc',
  contactNumber: 1234
}

var data = [{
  imageId: 1,
  shopId: 3,
  imageUrl: 'aaa'
}, {
  imageId: 2,
  shopId: 3,
  imageUrl: 'bbb'
}]

var result = row.image = data;

console.log(row)

【讨论】:

    【解决方案2】:

    你可以写row['image'] = data;row.image = data;

    【讨论】:

      【解决方案3】:

      如果你不想修改原件,你也可以这样做

      var  row = { shopId: 3, shopName: '1', address: 'abc', contactNumber: 1234 },
          data = [ { imageId: 1, shopId: 3, imageUrl: 'aaa' }, { imageId: 2, shopId: 3, imageUrl: 'bbb' } ],
         combo = Object.assign({},row,{["image"]:data});
      console.log(combo);

      【讨论】:

        【解决方案4】:

        如果数据包含 shopIds 不是 3 的对象,您可以使用 filter

            var row={ shopId: 3, shopName: '1', address: 'abc', contactNumber: 1234 }
        
            var data= [ { imageId: 1, shopId: 3, imageUrl: 'aaa' },
                        { imageId: 2, shopId: 3, imageUrl: 'bbb' },
                        { imageId: 2, shopId: 5, imageUrl: 'bbb' }];
        
        row.images = data.filter( el => el.shopId == row.shopId);
        
        console.log(row);

        【讨论】:

          猜你喜欢
          • 2020-07-16
          • 1970-01-01
          • 1970-01-01
          • 2016-03-10
          • 2019-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多