Javascript 向集合中的每个对象添加新属性

Javascript 向集合中的每个对象添加新属性,javascript,arrays,object,Javascript,Arrays,Object,您能帮助我简化向对象数组添加新属性的方式吗 我有一个这样的物体 response.data = [ {'year':2015, 'month':1}, {'year':'2016','month':2} ]; 我想添加一个新属性“monthName” response.data = [{'year':2015, 'month':1,'monthName':'January'}, {'year':'2016','month':

您能帮助我简化向对象数组添加新属性的方式吗

我有一个这样的物体

response.data = [ {'year':2015, 'month':1},
                  {'year':'2016','month':2}
];
我想添加一个新属性“monthName”

response.data = [{'year':2015, 'month':1,'monthName':'January'},
                 {'year':'2016','month':2,'monthName':'February'}
];
这就是我所做的

 var data = response.data;    // Improvement
 var ctr = 0;
 $.each(response.data, function(a,b){
         data[ctr].monthName = monthNumberToName(b.month);
         ctr++;
 });

 return data;

你能帮我简化我的代码吗,谢谢

更简单的版本可以是

return response.data.map( s => Object.assign( {}, s, { monthName : monthNumberToName( s.month) } ); 

更简单的版本可能是

return response.data.map( s => Object.assign( {}, s, { monthName : monthNumberToName( s.month) } ); 

您可以使用
map
使您的代码看起来更短且易于管理:

var-response={};
response.data=[
{'year':2015,'month':1},
{'year':'2016','month':2}
]; 
var数据=响应数据;
data.map((项目)=>{
item.monthName=MonthNumbertName(item.month);
});
函数monthNumberToName(monthNumber){
如果(月数==1){
返回“一月”;
}
如果(月数==2){
返回“二月”;
}
}

console.log(response.data)您可以使用
map
使您的代码看起来更短且易于管理:

var-response={};
response.data=[
{'year':2015,'month':1},
{'year':'2016','month':2}
]; 
var数据=响应数据;
data.map((项目)=>{
item.monthName=MonthNumbertName(item.month);
});
函数monthNumberToName(monthNumber){
如果(月数==1){
返回“一月”;
}
如果(月数==2){
返回“二月”;
}
}

console.log(response.data)
您可以使用
forEach
及其第一个参数:

const data=response.data;
data.forEach(d=>d.monthName=monthNumberToName(d.month));
返回数据;

您可以使用
forEach
及其第一个参数:

const data=response.data;
data.forEach(d=>d.monthName=monthNumberToName(d.month));
返回数据;
大大有助于简化代码

您可以这样做:

维护一个月数组:

const months = ["Jan","Feb", "Mar"];

let data = [ {'year':2015, 'month':1},
    {'year':'2016','month':2}
];

_.forEach(data, function(value, key) {
  value["monthName"] = months[value.month - 1];
});
大大有助于简化代码

您可以这样做:

维护一个月数组:

const months = ["Jan","Feb", "Mar"];

let data = [ {'year':2015, 'month':1},
    {'year':'2016','month':2}
];

_.forEach(data, function(value, key) {
  value["monthName"] = months[value.month - 1];
});

也许,你可以试试这个

const months = [
  'January',
  'February',
  'March',
  'April',
  'May',
  'June',
  'July',
  'August',
  'Septemper',
  'October',
  'November',
  'December'
]

var data = [
  {'year':2015, 'month':1},
  {'year':'2016','month':2}
]

data = data.map(m=> {
  m['monthName'] = months[m.month - 1]
  return m
})

console.log(data)

也许,你可以试试这个

const months = [
  'January',
  'February',
  'March',
  'April',
  'May',
  'June',
  'July',
  'August',
  'Septemper',
  'October',
  'November',
  'December'
]

var data = [
  {'year':2015, 'month':1},
  {'year':'2016','month':2}
]

data = data.map(m=> {
  m['monthName'] = months[m.month - 1]
  return m
})

console.log(data)

您的循环是错误的实现<代码>数据[ctr]
等于
b
ctr
a
相同<代码>$。每个的语法都是
(索引,项)
。你应该直接使用它。您也可以使用
Array.map
,但其签名不同。您可以执行
response.data.map(函数(obj){obj.monthName=monthNumberToName(b.month);return obj;})
您的代码已经工作了吗?您的循环实现不好<代码>数据[ctr]等于
b
ctr
a
相同<代码>$。每个的语法都是
(索引,项)
。你应该直接使用它。您也可以使用
Array.map
,但其签名不同。您可以执行
response.data.map(函数(obj){obj.monthName=monthNumberToName(b.month);return obj;})
您的代码已经工作了吗?您的
monthNumberToName
可以改进很多,这只是一个简单假设的示例代码。OP要求改进分配
monthName
而不是
monthNumberToName
,因此我将
monthNumberToName
作为示例代码。您的
monthNumberToName
可以改进很多,这只是一个简单假设的示例代码。OP要求改进分配
monthName
而不是
monthNumberToName
,因此我将
monthNumberToName
作为示例代码。forEach是否返回任何内容?据我所知,如果您使用
.map
,则不会进一步减少更新的代码。请记住,有特定于操作的函数。
forEach
是否返回任何内容?据我所知,如果您使用
.map
,则不会进一步减少更新的代码。请记住,有一些特定于操作的功能。