私はループを使ってそれができることを知っています、しかし私はこれをする上品な方法を見つけようとしています:
2つの配列があります。
var array1 = [['a', 'b'], ['b', 'c']];
var array2 = [['b', 'c'], ['a', 'b']];
2つが同じであることを確認するために、lodashを使用したいです。 '同じ'とは、array2に含まれていないitemがarray1にないことを意味します。
これらの項目間の同等性をチェックするという点で:
['a', 'b'] == ['b', 'a']
または
['a', 'b'] == ['a', 'b']
両方とも文字が正しく並んでいるのでうまくいきます。
前もって感謝します。
外側の配列をソートする場合、内側の配列はすでにソートされているので、 _.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()
は配列を変更しません。
これにはlodashs xor
を使うことができます。
doArraysContainSameElements = _.xor(arr1, arr2).length === 0
「同じ」とは、array2に含まれていないitemがarray1にないことを意味します。
これにはflatten()とdifference()を使用することができます。array2
にではないという項目があるかどうかを気にしないのであれば、うまく機能します。 array1
にあります。それはあなたが尋ねているように聞こえますarray1はarray2のサブセットです?
var array1 = [['a', 'b'], ['b', 'c']];
var array2 = [['b', 'c'], ['a', 'b']];
function isSubset(source, target) {
return !_.difference(_.flatten(source), _.flatten(target)).length;
}
isSubset(array1, array2); // → true
array1.Push('d');
isSubset(array1, array2); // → false
isSubset(array2, array1); // → true
PURE JS(配列とサブ配列に任意の順序で2つ以上の要素がある場合にも機能します)。文字列に,
が含まれる場合、文字列では使用されないjoin('-')
パラメータ文字として使用します(utfでも構いません)。
array1.map(x=>x.sort()).sort().join() === array2.map(x=>x.sort()).sort().join()
var array1 = [['a', 'b'], ['b', 'c']];
var array2 = [['b', 'c'], ['b', 'a']];
var r = array1.map(x=>x.sort()).sort().join() === array2.map(x=>x.sort()).sort().join();
console.log(r);
_.difference
関数を使用して、違いがあるかどうかを確認できます。
function isSame(arrayOne, arrayTwo) {
var a = arrayOne,
b = arrayTwo;
if (arrayOne.length <= arrayTwo.length) {
a = arrayTwo;
b = arrayOne;
return _.isEmpty(_.difference(a.sort(), b.sort()));
} else {
return false;
}
}
// examples
console.log(isSame([1, 2, 3], [1, 2, 3])); // true
console.log(isSame([1, 2, 4], [1, 2, 3])); // false
console.log(isSame([1, 2], [2, 3, 1])); // false
console.log(isSame([2, 3, 1], [1, 2])); // false
これがお役に立てば幸いです。