2016-06-08 3 views
-1

У меня есть массив JSON со мной:как объединить массив в 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' 
    }] 
} 
+0

Вы можете не только сделать 'row.image = данные;'? – romellem

+0

Должен ли результат быть новым объектом? является частью строки массива и находится в данных больше, чем только один элемент с тем же магазином? –

+0

Похоже, вы пытаетесь создать объект «магазин», который также содержит список изображений, связанных с магазином. Если это так, то ваш массив данных будет содержать только элементы с тем же значением «shopId». Является ли это уверенным, или вам нужно, как предложил Хосе, фильтровать массив данных? Кроме того, зачем вам нужен массив результатов «image», чтобы содержать значение «shopId»? Это предполагается из его родительского объекта «shopId». – Artif3x

ответ

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)

1

Вы можете написать либо row['image'] = data; или row.image = data;

1

Вы можете использовать filter если данные содержат объекты с shopId s, кроме 3:

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);

1

Если вы не хотите изменять оригиналы вы можете также сделать как

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);

Смежные вопросы