Javascript js array.IndexOf不使用对象?
我正在尝试创建一个包含日期和时间的对象的数组。我在一个可能存在重复的源上循环,所以每次我都要检查是否已经存储了当前日期和时间 然而,我总是得到重复的结果。所以我想array.indexOf可能不适用于对象Javascript js array.IndexOf不使用对象?,javascript,arrays,object,javascript-objects,indexof,Javascript,Arrays,Object,Javascript Objects,Indexof,我正在尝试创建一个包含日期和时间的对象的数组。我在一个可能存在重复的源上循环,所以每次我都要检查是否已经存储了当前日期和时间 然而,我总是得到重复的结果。所以我想array.indexOf可能不适用于对象 movies.forEach(function(movie){ if (days.indexOf(movie.day) !== -1) { //if the movie's day exists in our array of available days...
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进行解析。根据:
indexOf()
使用严格相等(与=或三重相等运算符使用的方法相同)将searchElement与数组的元素进行比较
这就是为什么
可能的原因。indexOf
总是导致-1。如果两个对象指向同一位置,则认为它们相等
var obj1 = { x: 100 };
var obj2 = obj1;
console.log( obj1===obj2 ); // outputs true
var obj1 = { x: 100 };
var obj2 = { x: 100 };
console.log( obj1===obj2 ); // outputs false
您可以使用将每个对象转换为字符串,然后比较它们。请记住,属性的顺序必须匹配
console.log( JSON.stringify( obj1 ) === JSON.stringify( obj2) ); //outputs true
如果您愿意使用,它将变得非常简单:
let a = [
{ day: '01', time: '18:00' },
{ day: '01', time: '16:00' },
{ day: '01', time: '18:00' },
{ day: '01', time: '16:00' }
];
let b = R.uniq(a);
console.log(b);
对象是通过引用进行比较的,而不是它们的内容。哦,谢谢。我只是试着把它串起来,然后它就如预期的那样工作了,你刚才解释了为什么=)你应该看看www.lodash。com@MattWelander经常小心穿线。这是一个相对昂贵的操作,您可能只想迭代和测试过滤属性。如果性能非常重要,请考虑运行一些性能测试。“它变得非常容易”---但是,您的代码不能产生正确的结果。@ ZrkMs,假设您没有真正读取我发布的代码,只是运行JS bin。它一定是在我开始玩ES6 Set对象时被修改过的。注释的两行…取消注释。我已经更新了JS Bin示例。很抱歉给你带来了困惑。我已经很久没用了。