Вы можете использовать метод Lodash differenceBy
и пропустить id
prop, если хотите найти разницу на основе id
. В противном случае вы можете использовать _.differenceWith(prev, next, _.isEqual)
const prev = [{"id":1},{"id":2},{"id":3},{"id":4}]
const next = [{"id":1},{"id":2},{"id":4}]
const diff = _.differenceBy(prev, next, 'id')
console.log(diff)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
На случай, если вы захотите проверить разные ключи или имена идентификаторов. Вы можете использовать differenceWith
и передать пользовательскую функцию проверки равенства.
const prev = [{"id":1},{"id":2},{"id":3},{"id":4}]
const next = [{"contact_id":1},{"contact_id":2},{"contact_id":4}]
const checkId = (prev, next) => {
return prev.id == next.contact_id
}
const diff = _.differenceWith(prev, next, checkId)
console.log(diff)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>
Существует довольно много проблем с Вашим кодом:
Этот код, скорее всего, работал бы (хотя я не протестировал его), и я думаю, что он делает то, что Вы хотите, чтобы он сделал:
class MyObject : public QObject
{
Q_OBJECT
public slots:
void MySlot( void )
{
std::cout << "slot called" << std::endl;
}
};
class CThread1 : public QThread
{
Q_OBJECT
public:
void run( void )
{
std::cout << "thread 1 started" << std::endl;
int i = 0;
while(1)
{
msleep( 200 );
i++;
if(i==1000)
emit MySignal();
}
}
signals:
void MySignal( void );
};
class CThread2 : public QThread
{
Q_OBJECT
public:
void run( void )
{
std::cout << "thread 2 started" << std::endl;
exec();
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
CThread1 oThread1;
CThread2 oThread2;
MyObject myObject;
QObject::connect( & oThread1, SIGNAL( MySignal() ),
& myObject, SLOT( MySlot() ) );
oThread2.start();
myObject.moveToThread(&oThread2)
oThread1.start();
return a.exec();
}
Теперь MyObject будет жить в thread2 (благодаря moveToThread).
MySignal должен быть отправлен от thread1 (думал, что я не уверен в том, он мог бы быть отправлен от основного потока, он действительно не имеет значения).
Никакой цикл событий не необходим в thread1 начиная с испускания сигнала, не нуждается в цикле событий. Цикл событий необходим в thread2 (lanched должностным лицом ()) для получения сигнала.
MySlot назовут в thread2.