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