изменить значение в массиве объектов из массива javascript - PullRequest
0 голосов
/ 13 января 2020

Хотелось бы узнать, как изменить значение во вложенном массиве из массива в javascript. У меня есть obj и arr, в котором мне нужно заменить значение month на значение arr в javascript, т.е. для "12" должно быть "De c"

var arr = ["Jan", "Feb","Mar", "Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
var obj =[{
  "month": "12",
  "year": "2013"
},
{
  "month": "10",
  "year": "2012"
}]

Ожидаемый результат:

[{
  "month": "Dec",
  "year": "2013"
},
{
  "month": "Oct",
  "year": "2012"
}]

Ответы [ 6 ]

3 голосов
/ 13 января 2020

Вы можете использовать .map(), чтобы получить желаемый результат:

const months = ["Jan", "Feb","Mar", "Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
const data =[{"month": "12", "year": "2013"}, { "month": "10", "year": "2012"}];

const result = data.map(
  o => ({...o, month: months[o.month - 1]})
);

console.log(result);
2 голосов
/ 13 января 2020

Используйте Array.map() для итерации массива объектов, используйте распространение объекта , чтобы скопировать исходные свойства объекта и получить название месяца из arr, используя цифру c индекс (на основе 0) путем вычитания 1 из номера месяца (на основе 1):

const arr = ["Jan", "Feb","Mar", "Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
const obj =[{ "month": "12", "year": "2013" }, { "month": "10", "year": "2012" }]

const result = obj.map(o => ({
  ...o, // copy the original properties of the object
  month: arr[o.month - 1], // get the month from arr
}))

console.log(result)
0 голосов
/ 13 января 2020

Вам не нужен массив названий месяцев для конвертации, вы можете использовать new Date.setMonth() и .toLocaleString, чтобы получить то же самое.

var obj =[{
  "month": "12",
  "year": "2013"
},
{
  "month": "10",
  "year": "2012"
}]

let out = obj.map(e => ({...e, month: new Date(new Date().setMonth(e.month - 1)).toLocaleString('default', { month: 'short' })}));
console.log(out)
0 голосов
/ 13 января 2020

Проверьте это: -

var obj =[{
  "month": "12",
  "year": "2013"
},
{
  "month": "10",
  "year": "2012"
}]


var result = [];
obj.forEach((obj, i) => {

obj.month=GetMonthName(obj.month);
   
     
     result.push(obj);
     
 });
 
debugger;console.log(result);

function GetMonthName(monthNumber) {
      var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
      return months[monthNumber - 1];
}
0 голосов
/ 13 января 2020

var arr = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
var obj = [{
    "month": "12",
    "year": "2013"
  },
  {
    "month": "10",
    "year": "2012"
  }
]

obj.map(ob => ob.month = arr[ob.month - 1])

console.log(obj)

Это отобразит ваш внешний массив obj и заменит ключ месяца каждого внутреннего объекта соответствующим месяцем из массива

0 голосов
/ 13 января 2020

Аналогично другим ответам с использованием forEach l oop вместо map функции

var arr = ["Jan", "Feb","Mar", "Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];

var obj =[{
  "month": "12",
  "year": "2013"
},
{
  "month": "10",
  "year": "2012"
}];


obj.forEach( o=>{
	o.month=arr[ o.month-1 ]
})
console.info( obj )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...