过去一小时一直试图解决这个问题,但似乎无法得到它。我正在尝试使用过去X天的日期创建一个数组。这是一个例子:
var dates = [];
var curr = new Date();
var first = curr.getDate();
dates.push(new Date(curr.getTime()).toISOString().split('T')[0]);
for(var i = 1; i < 6; i++){
var previous = new Date(curr.getTime());
previous.setDate(first - i);
dates.push(previous.toISOString().split('T')[0]);
}
console.log(dates);
结果给了我:
["2014-03-18", "2014-03-17", "2014-03-16", "2014-03-15", "2014-03-14", "2014-03-13"]
我如何将这种格式用于我的图表?
var chartData = [{day: '2014-03-18',clicks: 8,success: 4},
{day: '2014-03-17',clicks: 41,success: 3},
{day: '2014-03-16',clicks: 20,success: 1},
{day: '2014-03-15',clicks: 46,success: 3},
{day: '2014-03-14',clicks: 34,success: 2}];
我需要能够添加点击次数和成功,但由于可变名称是动态的,我很难过。我尝试了括号符号和点,我无法让它工作。
任何人都知道如何实现这一目标吗?
提前谢谢!
答案 0 :(得分:1)
从根本上说,要将对象放在数组而不是字符串中,可以创建对象:
dates.push({
day: previous.toISOString().split('T')[0],
clicks: 0,
success: 0
});
然后更新:
++dates[someIndex].success;
或
dates[someIndex].clicks = 27;
你说:
...但由于可变名称是动态的,我很难
...但没有说出你在说什么变量。如果您指的是该属性的名称,例如click
或success
,那没关系,您可以使用括号内的表示法和字符串:
var obj = {day: previous.toISOString().split('T')[0]};
obj[variableWithNameForClicks] = 0;
obj[variableWithNameForSuccess] = 0;
dates.push(obj);
和
++dates[someIndex][variableWithNameForSuccess];
或
dates[someIndex][variableWithNameForClicks] = 27;
这是有效的,因为在JavaScript中,您可以通过两种方式访问对象属性:带有文字属性名称(obj.foo
)的虚线表示法,或带有字符串属性名称的括号表示法({ {1}})。在括号中表示法,字符串可以是任何表达式的结果,包括变量查找。所以:
obj["foo"]
答案 1 :(得分:0)
var dates = [];
var curr = new Date();
var first = curr.getDate();
// Using variable object property names
var dayVar = "day";
var clicksVar = "clicks";
var successVar = "success";
// Increment from 0 instead of 1 so you don't have to repeat yourself
for ( var i = 0; i < 6; i++ ){
var dateObj = {};
var previous = new Date(curr.getTime());
previous.setDate(first - i);
dateObj[dayVar] = previous.toISOString().split('T')[0];
dateObj[clicksVar] = 0;
dateObj[successVar] = 0;
dates.push(dateObj);
}
// Increment clicks
dates[0][clicksVar] += 1;
// Increment success
dates[0][successVar] += 1;
console.log(dates);
如果你想回去查找特定日期的对象,可以使用像underscore这样的js库,或者你可以这样做:
// Today's date
var searchDate = new Date(curr.getTime()).toISOString().split('T')[0];
// Search through the array for the matching object
for (var i = 0; i < searchDate.length; i++) {
var obj = dates[i];
if ( obj.day === searchDate ) {
console.log(obj);
break;
}
}