を比較し、彼らは限り、それは例えばジャバスクリプト、潜在的に大きさの異なる二つの配列と異なるサイズの配列
var a1 = [ 1, 2, 3 ];
var a2 = [ 1, 2 ];
var a3 = [ 1, 3 ];
a1 == a2 => true;
a1 == a3 => false;
午前に行くのと同じあるかどうかを確認するための最良の方法何ですこれは何千回も行われており、構文はうまく記憶されています。
を比較し、彼らは限り、それは例えばジャバスクリプト、潜在的に大きさの異なる二つの配列と異なるサイズの配列
var a1 = [ 1, 2, 3 ];
var a2 = [ 1, 2 ];
var a3 = [ 1, 3 ];
a1 == a2 => true;
a1 == a3 => false;
午前に行くのと同じあるかどうかを確認するための最良の方法何ですこれは何千回も行われており、構文はうまく記憶されています。
function compareArraySeq(a, b) {
return a.slice(0, b.length).join(' ') == b.slice(0, a.length).join(' ');
}
が優秀!!関数呼び出しは必要ありません!オーバーヘッドをあまりにも悪くしないでください。 –
@ccyoungこれは空の文字列配列要素では失敗します。使用しないでください。 – Tomalak
@Tomalak - 空の配列で正しくテストされています - あなたの言っていることが見当たりません - 例を挙げることはできますか?ありがとう –
これについては(私はa1とa2についてデモンストレーションします)>
var min_val = min(a1.length, a2.length);
var equals = true;
for(i = 0; i < min_val; i++)
{
if(a1[i] != a2[i])
{
equals = false;
break;
}
}
結果は等価変数になります。関数をこのようにしたい場合は、引数としてa1とa2を渡し、equalsを返します。
true、これはそれを解決しますが、スライスなどでは関数を作成せずに済み得ると考えていました –
スライス解法とは異なり、これは非スカラー値、つまりオブジェクトの配列でも機能します。 – georg
function compareArraySeq(a1, a2) {
var i, l = Math.min(a1.length, a2.length);
for (i=0; i<l; i++) {
if (a1[i] !== a2[i]) return false;
}
return true;
}
function prefixEqual(a, b) {
var prefixLength = a.length < b.length ? a.length : b.length;
for(var i = 0; i < prefixLength; i+=1)
if(a[i] != b[i])
return false;
return true;
}
一度に一つのスポットをチェックするループを作ります。
var compare = function (a1, a2) {
var l = Math.min(a1.length, a2.length);
for (var i = 0; i < l; i++) {
if (a1[i] !== a2[i]) {
return false;
}
}
return true;
}
今、あなたはこのような配列を比較することができます:
var a = [0, 1, 2, 3];
var b = [0, 1, 2];
var c = [0, 1, 3];
compare(a, b); //true
compare(a, c); //false
希望これはあなたのために働く:)
フィドルリンク:http://jsfiddle.net/8zbJj/1/
[編集を私はこの作った ]に基づいてTomalaksコメント私はJSONが救助に来ることができると言っています。
だから、再び:ここにあなたが何をしたいのか[Iが思う]ないアレイの拡張です:
function comparePartial(arr1,arr2){
var arr2 = this, l1 = arr1.length, l2 = arr2.length;
return (l1<1 || l2<1
? false :
JSON.stringify(arr1.slice(0, l2)) ===
JSON.stringify(arr2.slice(0, l1))
);
}
Array.prototype.comparePartial =
Array.prototype.comparePartial || comparePartial;
//usage
var a1 = [ 1, 2, 3 ]
,a2 = [ 1, 2 ]
,a3 = [ 1, 3 ]
,a4 = ['','']
,a5 = ['','','']
,a6 = []
,a7 = ['bla','doh',1]
,a8 = ['bla','doh',1,'yeah','really']
,a9 = [1,3,5,'doh']
,a10= ['1','3','5','doh']
,a11= [{a:1,b:2},{c:3,d:4}]
,a12= [{a:1,b:2},{c:3,d:4},{e:5,f:6}]
console.log(
[ a1.comparePartial(a2)
,a2.comparePartial(a1)
,a1.comparePartial(a3)
,a4.comparePartial(a5)
,a5.comparePartial(a6)
,a1.comparePartial(a6)
,a8.comparePartial(a7)
,a10.comparePartial(a9) //=> 'type safe' comparison
,a11.comparePartial(a12) //=> can compare arrays of Objects
].join(' - ')
); //=> true - true - false - true - false - false - true - false - true
あなたの配列は、文字列や数値またはブール値であれば、あなたはそれらの文字列値を比較することができます。
function compareSimpleValues(a,b){
if(a.length>=b.length)return String(a).indexOf(String(b))===0;
return String(b).indexOf(String(a))===0;
}
最初のtrueと2番目のfalseはなぜですか? – Gumbo
なぜ 'al'と' a2'が同じですか? 'a2'の内容は' a1'の中にあるからです? –