我正在尝试创建一个包含日期和时间的对象的数组。我正在循环一个可能存在重复的源,所以我想在每次没有存储当前日期和时间时进行检查。
然而,我一直以重复为目标。所以我认为array.indexOf可能不适用于对象?
{dd.map(function(result){
console.log(result);
})}
循环完成后,什么可能的时间成立:
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};
它按预期工作。一旦我检索到数据,就需要JSON.parse。
答案 0 :(得分:2)
如果指向同一位置,则认为两个对象相等。
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
您可以使用JSON.stringify将每个对象转换为字符串,然后进行比较。请记住,属性的顺序必须匹配。
console.log( JSON.stringify( obj1 ) === JSON.stringify( obj2) ); //outputs true
答案 1 :(得分:1)
如果你愿意使用Ramda,那就太容易了:
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);
答案 2 :(得分:0)
根据MDN:
indexOf()
使用严格相等(与 === 或三等号,运算符相同的方法)将searchElement与数组元素进行比较
这就是为什么possibleTimes.indexOf
总是导致-1。