使用引号输出数组时出现问题

时间:2015-07-19 15:37:57

标签: javascript arrays

我一直试图让以下代码在一个内部返回两个sepparate数组......例如:[ 'July 1st', '4th' ]。但是,到目前为止,我的代码返回:[ 'July 1st, 4th' ]。注意,我需要它有确切的引号。

这是我的代码:

function friendly(str) {
  var final = [];
  var months = {01:"January" , 02: "February", 03:"March", 04:"April", 05:"May", 06:"June", 07:"July", 08:"August", 09:"September", 10:"October", 11:"November", 12:"December"}, i, c, date1, date2, getYear1, getMonth1, getDay1, getYear2, getMonth2, getDay2;
  var days = {01: "st", 02: "nd", 03: "rd", 04: "th", 05: "th"};
  date1 = str[0];
  date1.split('-');
  date2 = str[1];
  date2.split('-');
  getYear1 = date1.substring(0, 4);
  getMonth1 = date1.substring(5, 7);
  getMonth2 = date2.substring(5, 7);
  getDay1 = date1.substring(8, 10);
  getYear2 = date2.substring(0,4);
  getMonth2 = date2.substring(5,7);
  getDay2 = date2.substring(8, 10);
  for(var key in months){
    //console.log(getMonth1.charAt(0) == 0);
    if(getMonth1.charAt(0) == 0){
      getMonth1 = getMonth1.slice(1);
    }
    if(getMonth2.charAt(0) == 0){
      getMonth2 = getMonth2.slice(1);
    }
    if(getDay1.charAt(0) == 0){
      getDay1 = getDay1.slice(1);
    }
    if(getDay2.charAt(0) == 0){
      getDay2 = getDay2.slice(1);
    }
    if(days.hasOwnProperty(getDay1)){
      getDay1 = getDay1 + days[getDay1];
    }
    if(days.hasOwnProperty(getDay2)){
      getDay2 = getDay2 + days[getDay2];
    }
    if(months.hasOwnProperty(getMonth1)){
      getMonth1 = months[getMonth1];
    }
    if(months.hasOwnProperty(getMonth2)){
      getMonth2 = months[getMonth2];
    }
    if(getMonth1 == getMonth2 && getYear1 == getYear2 && getDay1 !== getDay2){
      return [getMonth1 + ' ' + getDay1 + ', ' + getDay2.split(',')];
      //console.log(getMonth1);
    }
  else if(getMonth1 == getMonth2 && getYear1 == getYear2 && getDay1 == getDay2){
    return [getMonth1 + ' ' + getDay1 + ', ' + getYear1];
  }
  else if(getYear1 !== getYear2 && getMonth1 !== getMonth2 && getDay1 !== getDay2){
    return [getMonth1 + ' ' + getDay1 + ', ' + getMonth2 + ' '+ getDay2.split(',')];
  }
    else if(getYear1 == getYear2 && getMonth1 !== getMonth2 && getDay1 !== getDay2){
      return [getMonth1 + ' ' + getDay1 + ', ' + getMonth2 + ' '+ getDay2 + ', ' + getYear1];
    }
    else if(getYear1 == getYear2 && getMonth1 !== getMonth2 && getDay1 !== getDay2){
      return;
    }
  else if (getYear1 !== getYear2 && getMonth1 == getMonth2 && getDay1 !== getDay2){
    return [getDay1 + ', ' + getDay2.split(',')];
  }
  }

}

friendly(['2015-07-01', '2015-07-04']);

2 个答案:

答案 0 :(得分:1)

您正在构建一个 String 并使用 Array literal 包装它。

根据您的描述,您似乎想要构建多个项目的数组,这些项目是您的变量。

例如

[getMonth1 + ' ' + getDay1 + ', ' + getDay2.split(',')];
//                        ^^^^^^^^^^       ^^^^^^^^^^^^^
// becomes
[getMonth1 + ' ' + getDay1, getDay2];
//                        ^^        ^
// or possibly
[getMonth1 + ' ' + getDay1].concat(getDay2.split(','));

您发布了大量代码,实际上与您的问题相关的很少,当您在将来尝试调试时考虑每行上的变量,然后您应该能够将问题修复或缩小到这个简单的例子对每个人来说都更容易理解,例如

var foo = "July", // it doesn't matter how we arrived at these variables
    bar = "1st",  // all that will matter for the question is how they
    baz = "4th";  // are used from here onwards
[foo + ' ' + bar + ', ' + baz]; // unexpected result
[foo + ' ' + bar, baz];         // expected result

答案 1 :(得分:1)

还有很多方法可以解决这个问题。这是一个很快激励你的人!

function friendly(arrDates) {
    var suffixes = ["", "st", "nd", "rd"];
    var months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    var result = [];
    arrDates.forEach(function(date) {
        var parts = date.split("-");
        result.push(
            months[parseInt(parts[1])] +
            " " +
            (parts[2].slice(0,1) == 0 ? parts[2].slice(1) : parts[2]) + 
            (suffixes[parseInt(parts[2])] || "th")
        );
    });
    return result;
}
result = friendly(['2015-07-01', '2015-07-04', '2015-09-16']);
console.log(result);

打印出来:

[ 'July 1st', 'July 4th', 'September 16th' ]

例如 - http://repl.it/xip

像这样使用forEach意味着您可以提供任意数量的日期 - 我的演示显示3。

相关问题