【问题标题】:I want to replace the value of an object inside an array?我想替换数组中对象的值?
【发布时间】:2021-01-22 10:29:43
【问题描述】:

我的数组中有一个时间戳,我从中删除了 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()

【问题讨论】:

  • 嘿,你的想法看起来不错。你知道拼接吗?另外,也许您可​​以在第一次询问时间戳时进行切片,省去再次循环的麻烦。最后别忘了在函数结束时返回。
  • 谢谢@billybadas,是的,首先尝试了.splice,但也没有让它起作用,还有很多练习要做。感谢您的意见!

标签: javascript arrays object replace array.prototype.map


【解决方案1】:

你知道用“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);

【讨论】:

  • 使用const 声明的对象和数组可以更改。只有像字符串或数字这样的原始数据类型不能。
  • 虽然这可能是因为 js 的工作方式,但它违背了将它们声明为“const”的目的。总体而言,在学习如何使用“var”进行编码时,错误可能会更少
  • 谢谢!是的,是编码尝试让我了解 JS 的新手,漂亮而整洁的代码,谢谢!
  • 我不同意; letconst 是块范围的,并且在其范围内 newTimeStamp 永远不会改变,因此使用 const 声明它是完全合法的(我会说更可取)。
【解决方案2】:

您的代码看起来不错,只需重构该片段(使用 forEach 的最佳方法):

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

它应该可以工作。

【讨论】:

  • 谢谢@Sa1m0n 它有效....在第一个下再次尝试.foreach,但意识到我应该继续,谢谢!!!
猜你喜欢
  • 2020-05-23
  • 1970-01-01
  • 2020-01-16
  • 2016-07-20
  • 2018-05-12
  • 1970-01-01
  • 2016-10-01
  • 2015-03-31
  • 2020-10-30
相关资源
最近更新 更多