代码之家  ›  专栏  ›  技术社区  ›  John V

如何将数组映射到日期?

  •  0
  • John V  · 技术社区  · 6 年前

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

    Dictionary << Date, int []>>
    

    用于将数组绑定到特定日期。在JS中实现同样的功能最简单的方法是什么?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Jonas Wilms    6 年前

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

    Dicitionary Map {} )但是,对于动态键,如果使用对象,则只能将字符串用作键,其他任何内容都将转换为字符串。还有一个 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键。

        2
  •  2
  •   rubentd    6 年前

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

    const a = new Date();
    const b = [1, 2, 3];
    
    
    const c = {
      [a.getTime()]: b,
    };

    在本例中,c将是从date到array的对象或散列映射。

        3
  •  1
  •   Akrion    6 年前

    momentjs ,你可以利用这一刻 unix toDate().getTime() to get the date in ms 然后利用一个物体或 Map 要获得您需要的:

    let date1 = moment().unix()
    let date2 = moment().add(7, 'days').unix()
    
    let dict = {}  // using object
    
    dict[date1] = [1,2,3]
    dict[date2] = [4,5,6]
    
    console.log('dict via Object', dict[date1], dict[date2])
    
    let dict2 = new Map()  // using Map
    
    dict2.set(date1, [1,2,3])
    dict2.set(date2, [4,5,6])
    
    console.log('dict via Map', dict2.get(date1), dict2.get(date2))
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>