使用map或任何其他方法转换数组 - javascript

问题描述 投票:0回答:5

这是我的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}
]
javascript arrays json object
5个回答
4
投票

你选择.map是对的。问题是,您正在尝试更新对象,并使用引用传递对象。所以所有对象都将保持相同的id。您必须创建一个副本,以便不覆盖值。你可以使用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功能,可以查看以下内容:How do I correctly clone a JavaScript object?


1
投票

您可以在数组.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
投票

您可以使用带扩展语法的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);

0
投票

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

我试过这个,我正确得到了这个答案,这是一个好方法吗?


-1
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.