以日期为键的地图无法正确检索项目

时间:2019-01-21 13:52:05

标签: javascript reactjs

我正在尝试构建一种类型的地图: 键:日期->值:对象列表

为此,我获得了以下代码:

componentDidMount(){
    let allPredictions = listAllPredictions();
    this.predictions = new Map();

    for (let i = 0; i<allPredictions.length; i++) {
        let prediction = allPredictions[i];

        if (!this.predictions.has(prediction.tsPredictionFor)){
            this.predictions.set(prediction.tsPredictionFor, []);
        }

        let predictionsForDate = this.predictions.get(prediction.tsPredictionFor);
        predictionsForDate.push(prediction);
    }
    let d = new Date(2019, 1, 10, 0, 0, 0, 0);

    console.log('Prediction for date ' + d + ': ' + this.predictions.get(d));
    console.log('All predictions: ')
    console.log(this.predictions)

    //this.setState({activePredictions: listActivePredictions()})
}

似乎无法正常工作的是,地图无法正确比较2个日期。我注意到.has函数始终返回false,即使有些条目具有相同的日期。

这些是日志: logs

如您所见,以下索引具有相同的日期:0和3、1、4、2和5,但是由于某种原因,地图无法检测到它,因此对于每个条目,它都会创建一个新列表(如您可以看到:Array(1))。

这是什么原因?

1 个答案:

答案 0 :(得分:1)

Date对象不会覆盖===运算符,这意味着要比较的是它们是否具有相同的引用。

作为一个简单的示例,请使用以下代码:

console.log(new Date() === new Date())

无论如何,这总是会返回false,因为两个创建的对象都有不同的引用。

但是,您可以使用通过将它们格式化为键而生成的字符串:

console.log((new Date()).getTime() === (new Date()).getTime())