我正在运行以下内容:

if (doSelect('Location').length > 0 && doSelect('Date').length > 0 || doSelect('State').length > 0 && doSelect('Date').length > 0) {
  var dateText = doSelect("Date").siblings('td').text().split(/\s+/g);
  console.log(dateText);
  $wikiDOM.find('.nourlexpansion').remove();
  $wikiDOM.find("#coordinates").parent().remove();
  $('#results').append('<li>' + curTitle + "<br>" + doSelect("Location").siblings('td').text() + '<br>' +
    dateText[0] + "&nbsp; " + dateText[1].replace(/,/g , '&nbsp; ') + "&nbsp; " + dateText[2].replace(/;/g , '&nbsp; ') + "&nbsp;" + dateText[3].replace(/,/g , '&nbsp; ') + "&nbsp; " + dateText[4] + "&nbsp; " + dateText[5] + "&nbsp; " +  '</li>');
}


该行定义了可能的结果:

var dateText = doSelect("Date").siblings('td').text().split(/\s+/g);


控制台可以提供:

["19", "May", "1945", "–", "22", "August", "1945"]


所以要打印这些日期,我要做:

dateText[0] + "&nbsp; " + dateText[1].replace(/,/g , '&nbsp; ') + "&nbsp; " + dateText[2].replace(/;/g , '&nbsp; ') + "&nbsp;" + dateText[3].replace(/,/g , '&nbsp; ') + "&nbsp; " + dateText[4] + "&nbsp; " + dateText[5] + "&nbsp;


这使:

1945年5月19日至8月22日

但有时我没有所有这些日期,因此dateText[3]可能不存在的数量与dateText[9]一样多

不仅如此,我使用.replace(/,/g , '&nbsp; ').replace(/,/g , '&nbsp; ')是因为有时日期出来像19,May,1945一样全部堆叠在一起,并且我还需要删除dashcommasemicolumn

基本上,我试图以一种一致的方式来执行此操作,并且如果不需要某些[N].replace并且不存在某些August, 22, 1945或,则不会在控制台中给出错误。

这是我要实现的目标:


  1945年5月19日
  
  1945年8月22日


有时我什至会像那样去相反的月份和日期。

不知道该如何处理。

最佳答案

如果您尝试这样的事情怎么办?

var dateText = ["19", "May", "1945", "–", "22", "August", "1945"];

var d = '';

for(var i = 0; i < dateText.length; i++) {
    d += dateText[i] + ' ';
}

console.log(d);


控制台输出:19 May 1945 – 22 August 1945

要摆脱“-”和/或插入换行符,您可以轻松地修改循环以进行处理。这样可以使您的代码保持干净/简单,并允许轻松进行更改,这些更改将来会影响此类型的所有对象。

小提琴:https://jsfiddle.net/n2s7nwju/1/

09-20 18:57