如何填充变量列表?

How do I populate a list of vars?

我正在尝试组织我的代码以使其看起来不那么愚蠢。

var date = new Date();
  
var tokyo = new Date().toLocaleDateString("ja-JP");
var londo = new Date().toLocaleDateString("en-US");

document.getElementById('Tokyo').innerHTML = tokyo;
document.getElementById('London').innerHTML = london;

这对于 2-3 个城市来说可能看起来不错,但随着越来越多的城市被添加,这段代码将开始看起来真的 redundant/silly。

所以我尝试填充 html 元素 li 并将每个城市放在每个 li 中。

var cityList = ['london', 'tokyo'];

function populateCities() {
  var list = document.querySelector(".cities");

  var li;
  for (var e = 0; e & lt; cityList.length; e++) {
    li = document.createElement("li");
    li.appendChild(document.createTextNode(cityList[e]));
    list.appendChild(li);
  }

  var date = new Date();

  var tokyo = new Date().toLocaleDateString("ja-JP");
  var londo = new Date().toLocaleDateString("en-US");
}

window.onload = populateCities;

而不是显示每个城市的日期,每个 li 字面意思是将城市名称(文本)放入其中。

我想我需要在 var 中放入参数而不是文字,但我还不够了解 javascript 无法修复上述代码。

只是想学习 javascript。任何帮助将不胜感激。

如果您想以编程方式定义您的时间戳,您需要将 tz 信息添加到您的城市列表:

var cityList = ["ja-JP", "en-US"]

然后你就可以使用array.map通过tz得到一个时间数组:

var date = new Date()
var timeList = cityList.map(tz => date.toLocaleDateString(tz))

您可以使用它来填充您的 li 元素:

var cityList = ["ja-JP", "en-US"]
var list = document.querySelector(".cities")
var date = new Date()
cityList.forEach(tz => {
    var li = document.createElement("li");
    li.appendChild(document.createTextNode(date.toLocaleDateString(tz)));
    list.appendChild(li);
})
<ul class="cities"></ul>

var cityList = ['london', 'tokyo'];
var cityListLocalDatesMapping = {
    'london': 'en-US',
    'tokyo': 'ja-JP'
};
// Nothing complex here , you just missed the mapping. i.e for which country which codes should be used in toLocaleDateString function
function populateCities() {
    var list = document.querySelector(".cities");
    var li;
    for (var e = 0; e < cityList.length; e++) {
        li = document.createElement("li");
        li.appendChild(document.createTextNode(new Date().toLocaleDateString(cityListLocalDatesMapping[cityList[e]])));
        list.appendChild(li);
    }
}

cityList应该是一个既包含城市名称又包含城市代码的数据结构(被toLocaleDateString使用),对象{}比数组更合适,像这样:

var cityList = {
  london: "en-GB",
  tokyo: "ja-JP",
  /* more cities and their codes */
};

使用像 for(var city in cityList) 这样的 for..in 循环,我们可以通过 city 访问城市名称,通过 cityList[city] 访问城市代码,并使用它们来填充列表像这样:

var cityList = {
  berlin: "de-DE",
  cairo: "ar-EG",
  london: "en-GB",
  "new york": "en-US",
  paris: "fr-FR",
  seoul: "ko-KR",
  tokyo: "ja-JP"
};

function populateCities() {
  var list = document.querySelector("#cities");
  var date = new Date();

  for (var city in cityList) {
    var li = document.createElement("li");

    li.textContent = city + ": " + date.toLocaleDateString(cityList[city]);

    list.appendChild(li);
  }
}

window.onload = populateCities;
<ul id="cities"></ul>

var cityList = ['london','tokyo'];

应该是

var cityList = ['en-US','ja-JP'];

li.appendChild(document.createTextNode(cityList[e]));

应该是

li.appendChild(document.createTextNode(new Date().toLocaleDateString(cityList[e])));

看起来不太干净,但应该可以用