【发布时间】:2016-05-14 18:27:18
【问题描述】:
我正在尝试创建一个包含日期和时间的对象的数组。我正在循环一个可能有重复的源,所以我想每次检查我还没有存储当前日期和时间。
但是,我总是以重复结束。所以我认为 array.indexOf 可能不适用于对象?
movies.forEach(function(movie){
if (days.indexOf(movie.day) !== -1) { //if the movie's day exists in our array of available days...
possibleMovies.push(movie);
//create a day/time object for this movie
dt = {day: movie.day, time: movie.time};
//unless we already have this day and time stored away, do so
if (possibleTimes.indexOf(dt) === -1) {
possibleTimes.push(dt);
}
}
});
循环完成后可能的时间:
[ { day: '01', time: '18:00' },
{ day: '01', time: '16:00' },
{ day: '01', time: '18:00' },
{ day: '01', time: '16:00' } ]
我希望第三和第四行不在那里......
--------- 更新 ----------
我变了
dt = {day: movie.day, time: movie.time};
进入这个
dt = JSON.stringify({day: movie.day, time: movie.time});
它按预期工作。一旦我检索到数据,只需要 JSON.parse。
【问题讨论】:
-
对象是通过引用来比较的,而不是它们的内容。
-
哦,谢谢。我只是尝试对其进行字符串化,然后它按预期工作,您刚刚解释了原因 =)
-
你应该看看 www.lodash.com
-
@MattWelander 小心串连。这是一个相对昂贵的操作,您可能只想迭代和测试过滤属性。如果性能很关键,请考虑运行一些性能测试。
标签: javascript arrays object javascript-objects indexof