如何在JavaScript中更新数组中的特定值

时间:2017-11-06 08:16:02

标签: javascript angularjs arrays object properties

我有以下数组

0:{VERSION: 1, CURRENT_DATE: "1900-01-01", CURRENT_ACTIVITY_DATE: "2017-06-22"},
1:{VERSION: 2, PREVIOUS_DATE: "1900-01-01", PREVIOUS_ACTIVITY_DATE: "2017-06-22"}

我需要更改日期格式并使用新的格式化日期更新数组。任何想法都会有所帮助。

我面临的确切问题是数组索引在每一行都不一样。该代码适用于“PREVIOUS_ACTIVITY_DATE”,但对于“CURRENT_ACTIVITY_DATE”,日期格式保持不变,不会更改。如果我有更多具有不同索引的行,我需要更改所有行的格式

我正在使用moment.js更改格式,而且该部分工作正常。

提前致谢。

3 个答案:

答案 0 :(得分:1)

只需在数组中使用 Array#map() method ,它就会更新数组中的每个项目日期属性:

arr.map(function(el) {
  if (el["PREVIOUS_ACTIVITY_DATE"])
    el["PREVIOUS_ACTIVITY_DATE"] = new Date(el["PREVIOUS_ACTIVITY_DATE"]);

  if (el["PREVIOUS_DATE"])
    el["PREVIOUS_DATE"] = new Date(el["PREVIOUS_DATE"]);

  if (el["CURRENT_ACTIVITY_DATE"])
    el["CURRENT_ACTIVITY_DATE"] = new Date(el["CURRENT_ACTIVITY_DATE"]);

  if (el["CURRENT_DATE"])
    el["CURRENT_DATE"] = new Date(el["CURRENT_DATE"]);

  return el;
});

<强>演示:

const arr = [{
    VERSION: 1,
    CURRENT_DATE: "1900-01-01",
    CURRENT_ACTIVITY_DATE: "2017-06-22"
  },
  {
    VERSION: 2,
    PREVIOUS_DATE: "1900-01-01",
    PREVIOUS_ACTIVITY_DATE: "2017-06-22"
  }
];

arr.map(function(el) {
  if (el["PREVIOUS_ACTIVITY_DATE"])
    el["PREVIOUS_ACTIVITY_DATE"] = new Date(el["PREVIOUS_ACTIVITY_DATE"]);

  if (el["PREVIOUS_DATE"])
    el["PREVIOUS_DATE"] = new Date(el["PREVIOUS_DATE"]);

  if (el["CURRENT_ACTIVITY_DATE"])
    el["CURRENT_ACTIVITY_DATE"] = new Date(el["CURRENT_ACTIVITY_DATE"]);

  if (el["CURRENT_DATE"])
    el["CURRENT_DATE"] = new Date(el["CURRENT_DATE"]);

  return el;
});

console.log(arr);

注意:

  • 您需要检查对象中是否存在密钥。

  • 我在这里以new Date(el["PREVIOUS_ACTIVITY_DATE"])为例, 您只需要使用momentjs syantax更改它。

答案 1 :(得分:1)

如果您不知道密钥是什么,可以通过拨打var keys = Object.keys(array[0])来访问它们。

如果你想修改ex。当前日期,然后你可以通过以下方式完成:

var currentDateKey = keys[1];
array[0][currentDateKey] = "newDateString";

并且您的数组将被修改为新值。

答案 2 :(得分:0)

您可以选择以下方法:

var myArray = [
    {VERSION: 1, CURRENT_DATE: "1900-01-01", CURRENT_ACTIVITY_DATE: "2017-06-22"},
    {VERSION: 2, PREVIOUS_DATE: "1900-01-01", PREVIOUS_ACTIVITY_DATE: "2017-06-22"}
];

//Format all entries with the desired keys...
var formatKeys = ["CURRENT_DATE","CURRENT_ACTIVITY_DATE","PREVIOUS_DATE","PREVIOUS_ACTIVITY_DATE"];

// Iterate through your array
for(var i = 0; i < myArray.length; i++){
    // Iterate through the desired keys to format
    for(var key in formatKeys){
         if(myArray[i][formatKeys[key]] !== undefined)
         myArray[i][formatKeys[key]].format(); // Your format call
    }
}