【问题标题】:Can I turn .map array into a comma separated array with double quotes?我可以将 .map 数组转换为带双引号的逗号分隔数组吗?
【发布时间】:2018-08-30 15:52:34
【问题描述】:

我正在尝试从一组 twig 变量中获取一些数据并将它们解析为 javascript 插件。它们是数组中列出的一组日期。它们首先像字符串一样呈现到模板上:

{"date":"2018-08-30, 2018-08-13, 2018-08-10, 2018-08-01, 2018-08-26, 2018-09-27, 2018-09-26, 2018-09-25, 2018-09-24, 2018-09-23, 2018-09-29, 2018-09-28"}

然后我获取这些数据并使用它创建一个具有以下函数的数组:

const datesNotAvailableArray = $('#datesGone').data('dates');
var arr = Object.keys(datesNotAvailableArray).map(function(k) { 
    return datesNotAvailableArray[k] 
});

当我console.log(arr[0]) 我得到以下输出:

2018-08-30, 2018-08-13, 2018-08-10, 2018-08-01, 2018-08-26, 2018-09-27, 2018-09-26, 2018-09-25, 2018-09-24, 2018-09-23, 2018-09-29, 2018-09-28

这很好,但我真正想要的是这种东西:

["2018-08-30", "2018-08-13", "2018-08-10", etc etc]

我可以在 .map 函数本身内执行此操作吗?

【问题讨论】:

  • datesNotAvailableArray 对象上是否还有其他键?
  • 好像你在找JSON.stringify(value.date.split(", "))

标签: javascript arrays json ecmascript-6


【解决方案1】:

该对象只有一个键,即date,其值是包含所有日期的字符串。您需要将字符串按, 拆分以达到您想要的效果,还需要通过trim() 拆分字符串以删除拆分后剩余的额外空间。

const dateObj = {"date":"2018-08-30, 2018-08-13, 2018-08-10, 2018-08-01, 2018-08-26, 2018-09-27, 2018-09-26, 2018-09-25, 2018-09-24, 2018-09-23, 2018-09-29, 2018-09-28"}

var dates = dateObj.date.split(",").map(s => s.trim());

console.log(dates);

【讨论】:

    【解决方案2】:
    const datesNotAvailableArray = $('#datesGone').data('dates');
    datesNotAvailableArray['date'].split(', ')
    

    【讨论】:

      【解决方案3】:

      使用String.prototype.split() 很简单,它将通过将字符串分成子字符串,返回一个字符串数组,

      split() 方法上查看 , 后面的多余空格,这将帮助您防止使用额外的方法,例如map()trim(),例如date.split(',').map(i=>i.trim())

      var dates = {
        "date": "2018-08-30, 2018-08-13, 2018-08-10, 2018-08-01, 2018-08-26, 2018-09-27, 2018-09-26, 2018-09-25, 2018-09-24, 2018-09-23, 2018-09-29, 2018-09-28"
      };
      console.log(dates.date.split(", "));

      【讨论】:

        【解决方案4】:

        我认为您正在寻找更多类似的东西:

        var arr = Object.keys(datesNotAvailableArray).map(k => obj[k].split(','))[0]
        console.log(arr[0); // ["2018-08-30", " 2018-08-13", " 2018-08-10", " 2018-08-01", " 2018-08-26", " 2018-09-27", " 2018-09-26", " 2018-09-25", " 2018-09-24", " 2018-09-23", " 2018-09-29", " 2018-09-28"]
        

        它会得到你想要的结果,但它只有在你的源对象有其他键时才有用。但是,我建议不要这样做,因为这样做会丢失关于哪个输出数组索引从源对象的哪个键映射的信息。

        以前的任何答案都比您尝试使用.map 做的方法更好

        【讨论】:

          【解决方案5】:

          您可以使用split() 将字符串转换为数组,然后,如果您想要带双引号的类似数组的字符串,您可以使用.map 并在每次迭代中返回'"' + e + '"',然后再次返回join(",")返回字符串。

          const obj = {"date":"2018-08-30, 2018-08-13, 2018-08-10, 2018-08-01, 2018-08-26, 2018-09-27, 2018-09-26, 2018-09-25, 2018-09-24, 2018-09-23, 2018-09-29, 2018-09-28"}
          
          var newArr = obj.date.split(",");//<-- (", ") could remove the spaces in this case
          
          console.log(newArr)//<-- array
          
          newArr = newArr.map(e=>'"' + e + '"')
          
          str = "["+newArr.join(",")+"]"
          
          console.log(str)//<-- string with " as your example

          【讨论】:

          • "2018-08-30", "2018-08-13", "2018-08-10", ... vs "2018-08-30", " 2018-08-13", " 2018-08-10", ... - 因此您还需要一个.map() 来删除前导空格;)
          • 这行不通,它将每个日期放入一个数组项中,如0: "2018-08-30",1: "2018-08-30" 等。我只需要字面上的["2018-08-30","2018-08-30","2018-08-30","2018-08-30"]
          • 这需要是一个数组,但就像我在上面显示的那样。如果它必须是一个字符串,那么只要数据是 ["2018-08-30","2018-08-30","2018-08-30","2018-08-30"] `
          • @Emeeus 是的,但你有这样的['2018-08-30, 2018-08-13, 2018-08-10, 2018-08-01, 2018-08-26, 2018-09-27, 2018-09-26, 2018-09-25, 2018-09-24, 2018-09-23, 2018-09-29, 2018-09-28'] 这是不对的。我需要这样["2018-08-30", "2018-08-13", "2018-08-10", etc etc]
          【解决方案6】:

          var obj = {"date":"2018-08-30, 2018-08-13, 2018-08-10, 2018-08-01, 2018-08-26, 2018-09-27, 2018-09-26, 2018-09-25, 2018-09-24, 2018-09-23, 2018-09-29, 2018-09-28"}
          const result = obj .date.split(',').map(s => s.trim());
          
          
          console.log(result)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-04-04
            • 2019-04-28
            • 1970-01-01
            • 1970-01-01
            • 2021-12-18
            • 1970-01-01
            相关资源
            最近更新 更多