Я хочу заменить значение объекта внутри массива?

#javascript #arrays #object #replace #array.prototype.map

#javascript #массивы #объект #заменить #array.prototype.map

Вопрос:

У меня есть временная метка в моем массиве, из которой я удалил буквы UTC, и я хочу заменить старую временную метку на «новую» временную метку (без UTC), Может быть, есть еще более простой способ удаления?

Итак, я попытался перебрать свои данные с помощью .forEach и .map пытаются заменить его, но до сих пор не поняли, как именно это сделать. Я просмотрел кучу потоков Stackoverflow по этому поводу, но не нашел решения, с которым я могу работать …. явно что-то упускаю или пишу что-то неправильно.

Итак, кто-нибудь может подсказать мне, как решить это наилучшим образом?

 const data = [
  {
    timestamp: "2019-03-01 09:00:00UTC",
    url: "/blub.html",
    userid: "12345"
  },
  {
    timestamp: "2019-03-01 09:00:00UTC",
    url: "/cont.html ",
    userid: "12346"
  },
  {
    timestamp: "2019-03-01 10:00:00UTC ",
    url: "/cont.html ",
    userid: "12345"
  },
  {
    timestamp: "2019-03-01 10:30:00UTC",
    url: "/ho.html ",
    userid: "12347"
  }
];

console.log("data", data);
console.log("ex: first data object:", data[0]);


//loop through and grab the timestamp in each object and remove the UTC stamp
const GrabTimeStamp = () => {
  data.forEach(function (objects, index) {
   
    const timeStamp = objects.timestamp;
    const newTimeStamp = timeStamp.slice(0, 19);
    console.log("newTimeStamp:", newTimeStamp, index);

//next step to replace the old timestamp with newTimeStamp

  });
};
GrabTimeStamp()

  

Комментарии:

1. Эй, твоя идея выглядит хорошо. Вы знаете о splice? Также, возможно, вы можете выполнить нарезку, когда вы запрашиваете временную метку в первый раз, избавив от некоторых проблем с повторным циклом. Наконец, не забудьте вернуть значение в конце функции.

2. Спасибо @billybadass, да, сначала попробовал .splice, но это тоже не сработало, осталось много практики. Спасибо за информацию!

Ответ №1:

Ваш код выглядит нормально, просто реорганизуйте этот фрагмент (лучший подход для работы forEach ):

 data.forEach((item, index) => {
   const timeStamp = item.timestamp;
   const newTimeStamp = timeStamp.slice(0, 19);
   item.timestamp = newTimeStamp; 
});
  

и это должно сработать.

Комментарии:

1. Спасибо @Sa1m0n, это работает …. пробовал .foreach снова под первым, но понимаю, что я должен был просто продолжить, спасибо!!!

Ответ №2:

Знаете ли вы, что переменные, объявленные с помощью «const», не могут быть изменены? Похоже, вы хотите использовать здесь «var». Последние 3 буквы могут быть удалены с помощью «slice (0, -3)».

 var data = [
  {
    timestamp: "2019-03-01 09:00:00UTC",
    url: "/blub.html",
    userid: "12345"
  },
  {
    timestamp: "2019-03-01 09:00:00UTC",
    url: "/cont.html ",
    userid: "12346"
  },
  {
    timestamp: "2019-03-01 10:00:00UTC",
    url: "/cont.html ",
    userid: "12345"
  },
  {
    timestamp: "2019-03-01 10:30:00UTC",
    url: "/ho.html ",
    userid: "12347"
  }
];

console.log("data", data);
console.log("ex: first data object:", data[0]);


//loop through and grab the timestamp in each object and remove the UTC stamp
var grabTimeStamp = () => {
  data.forEach(function (object, index) {
   
    var newTimeStamp = object.timestamp.slice(0, -3);
    console.log("newTimeStamp:", newTimeStamp, index);

    //next step to replace the old timestamp with newTimeStamp
    object.timestamp = newTimeStamp;
  });
};
grabTimeStamp();
  

Поскольку кажется, что вы довольно новичок в программировании, я попытался изменить только несколько вещей в вашем коде. Однако вашу функцию grabTimeStamp можно сделать короче:

 function removeTimestamp(data){
    data.foreach((item, index) => {
        item.timestamp = item.timestamp.slice(0, -3);
    });
}
removeTimestamp(data);
  

Комментарии:

1. Объекты и массивы, объявленные с const помощью, могут быть изменены. Только примитивные типы данных, такие как строки или числа, не могли.

2. хотя это возможно из-за того, как работает js, это противоречит цели объявления их «const». В целом, изучение того, как кодировать с использованием «var», вероятно, приведет к меньшему количеству ошибок

3. Спасибо! Да, новичок в программировании, пытаюсь разобраться в JS, хороший и аккуратный код, спасибо!

4. Я не согласен; let и const находятся в пределах блока и в пределах его области видимости newTimeStamp никогда не меняются, поэтому совершенно законно (и я бы сказал, предпочтительнее) объявлять его const .