コールバック関数とその「this」パラメーターを指定してfindIndexメソッドを使用できます。
注:古いブラウザはfindIndexを認識していませんが、ポリフィルを使用できます。
サンプルコード(元の質問では、新しいオブジェクトがプッシュされるのは、そのデータのいずれもが事前にプッシュされたオブジェクトにない場合に限られることに注意してください):
var a=[{name:"tom", text:"tasty"}], b;
var magic=function(e) {
return ((e.name == this.name) || (e.text == this.text));
};
b={name:"tom", text:"tasty"};
if (a.findIndex(magic,b) == -1)
a.push(b); // nothing done
b={name:"tom", text:"ugly"};
if (a.findIndex(magic,b) == -1)
a.push(b); // nothing done
b={name:"bob", text:"tasty"};
if (a.findIndex(magic,b) == -1)
a.push(b); // nothing done
b={name:"bob", text:"ugly"};
if (a.findIndex(magic,b) == -1)
a.push(b); // b is pushed into a