我可以将.map数组转换为带双引号的逗号分隔数组吗?

时间:2018-08-30 15:52:35

标签: javascript arrays json ecmascript-6

我正在尝试从一组树枝变量中获取一些数据,并将其解析为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函数本身中执行此操作吗?

6 个答案:

答案 0 :(得分:2)

该对象只有一个键,即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);

答案 1 :(得分:0)

您可以使用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

答案 2 :(得分:0)

使用String.prototype.split()简单地完成此操作,它将通过将字符串分成 substrings

来返回字符串数组

,方法中查看 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(", "));

答案 3 :(得分:0)

const datesNotAvailableArray = $('#datesGone').data('dates');
datesNotAvailableArray['date'].split(', ')

答案 4 :(得分:0)

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)

答案 5 :(得分:0)

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

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

所做的任何尝试相比,以前的任何答案都是更好的方法