Sackidude:
私は、オブジェクトの配列は、オブジェクトが含まれるかどうかを確認しようとしています。私は、同じ値とは関係ないはずのオブジェクトIDを持つ配列内のオブジェクトがあるとき、それはtrueを返したいです。これは、私はそれが働くだろうと思った方法です。
let arr = [{r:0, g:1}];
let obj = {r:0, g:1}
console.log(arr.includes(obj));
しかし、それはfalseを返し、私はそれがtrueを返す必要があります。IこれにはJSON.stringify(の文字列)と私はこのようなを探していたオブジェクトに、アレイ内のすべてのオブジェクトを変換する必要があります:
let arr = [JSON.stringify({r: 0, g: 1})]
let obj = {r: 0, g: 1}
console.log(arr.includes(JSON.stringify(obj)));
複数のオブジェクトでそれを行うには別の、より簡単かつ効率的な方法はありますか?
artanik:
JSON.stringify
あなたがオブジェクトのいずれかのプロパティの順序を変更した場合に期待どおりに動作しません。
あなたは使用することができる.some
との組み合わせでisEqual
lodashから(または他の選択肢)。それとも、自分でそれを書きますが、注意することができ、私は既存のアプローチを使用することをお勧めする理由ですあまりにも多くのエッジケースが、あります。車輪の再発明する必要はありません。
let arr = [JSON.stringify({r: 0, g: 1})]
let obj = {g: 1, r: 0}
console.log(arr.includes(JSON.stringify(obj)));
let arr2 = [{r:0, g:1}];
let obj2 = {g:1, r:0};
console.log(arr2.some(item => _.isEqual(item, obj2)));
console.log(_.some(arr2, item => _.isEqual(item, obj2))); // more canonical way
<script src="https://cdn.jsdelivr.net/lodash/4/lodash.min.js"></script>