Это мой объект JSON:

{
   id: 3,
   cno: 103,
   username: 'basha',
   name: 'New Complaint',
   desc: 'Need bag',
   storeId: [ 5, 1 ]
}

Я хочу, чтобы мой ожидаемый результат был таким:

[
  {id: 3,cno: 103,username: 'basha',name: 'New Complaint',desc: 'Need bag',storeId:5},
  {id: 3,cno: 103,username: 'basha',name: 'New Complaint',desc: 'Need bag',storeId:1}
]
0
Mohamed Sameer 1 Мар 2018 в 08:45

5 ответов

Лучший ответ

Вы вправе выбрать .map. Проблема в том, что вы пытаетесь обновить объект, и объекты передаются по ссылке. Таким образом, все объекты будут иметь одинаковый идентификатор. Вам нужно будет создать копию, чтобы не переопределять значение. Вы можете использовать Object.assign для этого.

var data = {
   id: 3,
   cno: 103,
   username: 'basha',
   name: 'New Complaint',
   desc: 'Need bag',
   storeId: [ 5, 1 ]
};

var result = data.storeId.map(function(id){
  return Object.assign({}, data, {storeId: id});
});
console.log(result)

Если вам неудобно использовать функции ES6, вы можете проверить следующее: Как это сделать Я правильно клонировал объект JavaScript?

4
Rajesh 1 Мар 2018 в 05:58
var data = {
   id: 3,
   cno: 103,
   username: 'basha',
   name: 'New Complaint',
   desc: 'Need bag',
   storeId: [ 5, 1 ]
}


var finalData = data.storeId.map(x => {
  return({
     id: data.id,
     cno: data.cno,
     username: data.username,
     name: data.name,
     desc: data.desc,
     storeId: x
  })
});

console.log(finalData);

Я попробовал это сейчас, я получил этот ответ правильно, это хороший подход?

0
Mohamed Sameer 1 Мар 2018 в 05:57

Вы можете использовать .map() в массиве storeId и вернуть новый объект, который имеет текущее значение в качестве значения storeId.

var obj = {
   id: 3,
   cno: 103,
   username: 'basha',
   name: 'New Complaint',
   desc: 'Need bag',
   storeId: [ 5, 1 ]
};

var data = obj.storeId.map(el => {
  let newObject = Object.assign({}, obj);
  newObject.storeId = el;
  return newObject;
})

console.log(data);
1
void 1 Мар 2018 в 05:57
var value       = {
   id: 3,
   cno: 103,
   username: 'basha',
   name: 'New Complaint',
   desc: 'Need bag',
   storeId: [ 5, 1 ]
}
var result = value['storeId'].map(function(val){
    var t = {}
		for(key in value){
					t[key]   = value[key]
     }
     t['storeId'] = val
     return t;
 })
console.log(result)
-1
Sudhakar Ayyar 1 Мар 2018 в 05:54

Вы можете использовать array#map с расширенным синтаксисом для создания объекта со всем существующим свойством и отдельным storeId.

var obj = {id: 3,cno: 103,username: 'basha',name: 'New Complaint',desc: 'Need bag',storeId: [ 5, 1 ]}
    result = obj.storeId.map(storeId => ({...obj, storeId}) )
console.log(result);
1
Hassan Imam 1 Мар 2018 в 05:57