Javascript 如何将数组映射到日期?

Javascript 如何将数组映射到日期?,javascript,arrays,Javascript,Arrays,在C#中,我将使用以下词典 Dictionary << Date, int []>> 字典> 用于将数组绑定到特定日期。在JS中,实现相同目标的最简单方法是什么 我需要能够更改整数数组中的值。使用该日期的时间戳作为js对象的键 例如,假设要将日期a映射到数组b: const a=新日期(); 常数b=[1,2,3]; 常数c={ [a.getTime()]:b, };使用该日期的时间戳作为js对象的键 例如,假设要将日期a映射到数组b: const a=新日期()

在C#中,我将使用以下词典

Dictionary << Date, int []>>
字典>
用于将数组绑定到特定日期。在JS中,实现相同目标的最简单方法是什么


我需要能够更改整数数组中的值。

使用该日期的时间戳作为js对象的键

例如,假设要将日期a映射到数组b:

const a=新日期();
常数b=[1,2,3];
常数c={
[a.getTime()]:b,

};使用该日期的时间戳作为js对象的键

例如,假设要将日期a映射到数组b:

const a=新日期();
常数b=[1,2,3];
常数c={
[a.getTime()]:b,

};您可以通过各种方式在Js中实现相同的行为

dictionary
可以被
Map
替换,或者只是一个带有动态键的对象(
{}
),但是如果使用对象,则只能将字符串用作键,其他任何内容都将转换为字符串。JS中还有一个
Date
对象,但是表示同一时间的两个日期不匹配:

 const a = new Date(0), b = new Date(0);
 console.log(a === b); // false
因此,它们不会存储在地图中的同一条目中。相反,您可以将日期字符串化,因为字符串由值进行比较。
int[]
只是js中的一个数字数组

  const date1 = new Date(0);
  const date1b = new Date(0);

 const obj = {};
 const map = new Map;

 obj[date1] = [1, 2, 3];
 // equals:
 obj[date1.toString()] = [1, 2, 3];

 map.set(date1, [1, 2, 3]);
 map.set(date1.toString(), [3, 4, 5]);

 console.log(
   obj[date1b], // [1, 2, 3]
   map.get(date1b), // undefined
   map.get(date1b.toString()), // [3, 4, 5]
 );
我只需要按天分组

在这种情况下,您必须从只包含日期的日期中生成一个数字或字符串:

 (new Date()).toString().split("T")[0] // 2018-12-11

然后将该字符串用作Maps/objects键。

您可以通过各种方式在Js中实现相同的行为

dictionary
可以被
Map
替换,或者只是一个带有动态键的对象(
{}
),但是如果使用对象,则只能将字符串用作键,其他任何内容都将转换为字符串。JS中还有一个
Date
对象,但是表示同一时间的两个日期不匹配:

 const a = new Date(0), b = new Date(0);
 console.log(a === b); // false
因此,它们不会存储在地图中的同一条目中。相反,您可以将日期字符串化,因为字符串由值进行比较。
int[]
只是js中的一个数字数组

  const date1 = new Date(0);
  const date1b = new Date(0);

 const obj = {};
 const map = new Map;

 obj[date1] = [1, 2, 3];
 // equals:
 obj[date1.toString()] = [1, 2, 3];

 map.set(date1, [1, 2, 3]);
 map.set(date1.toString(), [3, 4, 5]);

 console.log(
   obj[date1b], // [1, 2, 3]
   map.get(date1b), // undefined
   map.get(date1b.toString()), // [3, 4, 5]
 );
我只需要按天分组

在这种情况下,您必须从只包含日期的日期中生成一个数字或字符串:

 (new Date()).toString().split("T")[0] // 2018-12-11

然后使用该字符串作为Maps/objects键。

既然您提到您正在使用
momentjs
,您可以使用moment或
toDate().getTime()到
以ms
获取日期,然后使用对象或
Map
获取所需内容:

let date1=moment().unix()
让date2=moment().add(7,'days').unix()
让dict={}//使用对象
dict[date1]=[1,2,3]
dict[date2]=[4,5,6]
log('dict via Object',dict[date1],dict[date2])
让dict2=newmap()//使用Map
dict2.set(date1[1,2,3])
dict2.set(日期2[4,5,6])
console.log('dict via Map',dict2.get(date1),dict2.get(date2))

既然您提到您正在使用
momentjs
,您可以使用moment或
toDate().getTime()
以毫秒为单位获取日期
,然后利用对象或
映射
获取所需:

let date1=moment().unix()
让date2=moment().add(7,'days').unix()
让dict={}//使用对象
dict[date1]=[1,2,3]
dict[date2]=[4,5,6]
log('dict via Object',dict[date1],dict[date2])
让dict2=newmap()//使用Map
dict2.set(date1[1,2,3])
dict2.set(日期2[4,5,6])
console.log('dict via Map',dict2.get(date1),dict2.get(date2))

您可以在JS中创建几乎相同的内容:您可以使用JavaScript
Map
类,但需要注意的是,映射键的相等比较不如Java灵活(我强烈怀疑C#)。请记住IE 8<不支持映射函数您可以在JS中创建几乎相同的东西:您可以使用JavaScript
Map
类,但需要注意的是,映射键的相等比较不如Java灵活(我强烈怀疑C#)。请记住IE 8<不支持映射函数,特别是在日期实例中这不是一个坏主意,因为时间戳比较是可靠的,并且适用于不同的日期实例。这可能更像OP所期望的。特别是对于日期实例,这不是一个坏主意,因为时间戳比较是可靠的,并且适用于不同的日期实例。这可能更像OP所期望的。我从数据库中检索日期,并在存储日期时使用矩。@John,那么我猜时间戳已经是一个字符串(或数字?)了。在这种情况下,请接受它。我可以问一下-我意识到日期也与时间组件一起保存,但我只需要按天分组,如何仅使用日期组件?否则,我将永远不会有两条记录在同一个键下,因为毫秒将不匹配:)我从数据库中检索日期,并在存储它们时使用矩。@John,那么我猜时间戳已经是一个字符串(或数字?)在这种情况下,我可以问一下吗?我意识到日期也和它的时间组件一起保存,但我只需要按天分组,我怎么能只使用日期组件呢?否则,我想我将永远不会在同一个键下有两条记录,因为毫秒将不匹配:)您在
getTime
上有一个小的输入错误
getTime