まず、配列をそのように比較することはできません。 Renanと同様に、配列は参照型です。配列内に何かがあるかどうかをチェックしてください。
if (!a1.length || !a2.length)
return -1;
今他の問題があります。 for
ループ内の配列をループすると、あなたのvarが現在のインデックスに設定されます。
どちらかforEach
を使用します。
function mxdiflg(a1, a2) {
...
var result = 0;
a1.forEach(function(i){
a2.forEach(function(j){
var diff = Math.abs(i.length - j.length);
if (diff > result)
result = diff;
});
});
return result;
}
// mxdiflg(['1','1'], ['111','1'])
または、配列から項目を得るためにあなたの機能を変更、インデックスに基づいて:余談として
function mxdiflg(a1, a2) {
...
var result = 0;
for (var idx in a1) {
for (var jdx in a2) {
var diff = Math.abs(a1[idx].length - a2[jdx].length);
if (diff > result)
result = diff;
}
}
return result;
}
// mxdiflg(['1','1'], ['11','1'])
を、あなたはES6を使用している場合、あなたはこれを行うことができます。私はそれをはるかに読みやすくします。その後、
function mxdiflg(a1, a2) {
if (!a1.length || !a2.length){
return -1;
}
var a1Lengths = a1.map((str) => str.length);
var a2Lengths = a2.map((str) => str.length);
var a1MaxLength = Math.max(...a1Lengths);
var a2MaxLength = Math.max(...a2Lengths);
return a2MaxLength - a1MaxLength;
}
// mxdiflg(['1','1'], ['111','1']) = 2
したがって、配列から最長および最短の文字列を取得したいですか? – Weedoze
配列を空の配列と比較しないでください。 Array型は参照型なので、これはうまくいきません。代わりに各配列の長さがゼロでないことを確認してください。 – Renan
ありがとう私は最初のif文を 'a1.length === 0 ||代わりにa2.length === 0'を使用します。この状況でlengthプロパティを使用する以外に、空の配列を調べる別の方法はありますか? – James