1. ホーム
  2. javascript

[解決済み] lodashを使ってギザギザ配列(順番がない項目の存在)を比較する

2022-04-23 13:39:54

質問

ループを使えばできるのは分かっているのですが、エレガントな方法を探しています。

ギザギザの2つの配列(配列の配列)があります。

var array1 = [['a', 'b'], ['b', 'c']];
var array2 = [['b', 'c'], ['a', 'b']];

を使いたいのですが lodash を使用して、上記の2つのギザギザ配列が同じであることを確認します。同じ」というのは、「同じ」でない項目が array1 に含まれないものは array2 . ギザギザ配列の項目は、実際には配列であることに注意してください。そこで、内側の配列同士を比較したいと思います。

これらの項目間の等質性をチェックするという意味で。

['a', 'b'] == ['b', 'a'] 

または

['a', 'b'] == ['a', 'b'] 

文字が常に順番に並んでいるため、どちらも機能します。


アップデイト : 元の質問は(ギザギザ配列の代わりに)"array"について話しており、何年もの間、多くの人が単純な1次元配列の比較について議論し(答えを追加し)ました(質問で提供された例が、彼らが期待していた単純な1次元配列と実際には似ていないことに気付かないままに)。

どのように解決するのですか?

外側の配列をソートすると _.isEqual() 内側の配列はすでにソートされているからです。

var array1 = [['a', 'b'], ['b', 'c']];
var array2 = [['b', 'c'], ['a', 'b']];
_.isEqual(array1.sort(), array2.sort()); //true

なお .sort() は配列に変異を与えます。もしそれが問題なら、まずコピーを作ってください(例えば) .slice() またはスプレッド演算子( ... ).

あるいは、Daniel Budickが以下のコメントで勧めているようにするのもよいでしょう。

_.isEqual(_.sortBy(array1), _.sortBy(array2))

Lodashの sortBy() は配列を変異させません。