#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
.