2016-11-06 19 views
1

arrayの最初の値が他の値よりも高いか低いかを比較するための推奨方法は何ですか?配列の最初の値を他の値と比較する

するvar A = [8,3、114,34,0,2]

下で私が比較するように値場合I [0]よりも高いか低い配列を有しますjsを介して他の配列値。 EDIT:予想されるvar結果:配列内に8よりも高い値があるため、結果は8です。

例2:VARのB = [34、2、23、8] 予想される出力:高く、他のすべての番号が[0]

+4

値を繰り返し処理するために 'for'ループを使用してください。次に、他のアイテムと比較するために「if」を選択します。 – zerkms

+0

@zerkmsに同意してください。時間の複雑さはN未満ではありません。各値を少なくとも1回比較して比較する必要があるためです。 – Devesh

+1

いくつかの値よりも高くなく、他の値よりも低く、他の値と同じではありませんか?あるいは、それが全部よりも高いか低いかを意味します。たとえば、出力を上、下、下、上、上にしたいでしょうか? –

答えて

1

よりも低いので、最善の方法は、1で始まるforloopあろう。

for(i = 1; i < a.length;i++){ 
    if(a[0] > a[i]) 
    { 
     //do something 
    } 
    else if(a[0] < a[i]) 
    { 
     //do something 
    } 
} 
+0

@DawnPatrolあなたのアドバイスに従えば、彼は存在しない配列要素、つまり[a.length]にアクセスしようとしています。このソリューションに問題はありません。彼は最初の要素をそれ自体と比較する必要がないので、i = 1で始まります。 –

+0

良い点、コメントが削除されました。 – DawnPatrol

2

あなたはそれはあなたが厳格な電子に対して次の

var min = Math.min.apply(null, a); 
    var max = Math.max.apply(null, a); 
1

テストなどのminとmax関数を呼び出すことができます他のすべての値よりも他のすべての値より高いか低いかどうかを知りたい場合は品質だけでなく...

var a = [8,3, 114,34,0,2]; 

a.forEach(function(element) { 
    element === a[0] ? console.log (element + ' is equal to ' + a[0]) : 
    element > a[0] ? console.log(element + ' is higher than ' + a[0]) : 
    console.log(element + " is lower than " + a[0]); 
}); 

//"8 is equal to 8" 
//"3 is lower than 8" 
//"114 is higher than 8" 
//"34 is higher than 8" 
//"0 is lower than 8" 
//"2 is lower than 8" 
0

// Create an array of -1/0/+1 for each value relative to first elt. 
 
const comps = ([head, ...tail]) => tail.map(e => e < head ? -1 : e === head ? 0 : +1); 
 

 
// Define some little convenience routines. 
 
const greater = c => c === +1; 
 
const less = c => c === -1; 
 

 
// See if some or all element(s) are greater or less. 
 
const someGreater = a => comps(a).some(greater); 
 
const someLess = a => comps(a).some(less); 
 
const allGreater = a => comps(a).every(greater); 
 
const allLess  = a => comps(a).every(less); 
 

 
// Test. 
 
const input = [8,3, 114,34,0,2]; 
 

 
console.log("Some are greater", someGreater(input)); 
 
console.log("Some are less", someLess(input)); 
 
console.log("All are greater", allGreater(input)); 
 
console.log("All are less", allLess(input));

0

面白いトリック:

function first_is_bigger (array) { 
    var comp = array.join(" && " + array[0] + " > "); 
    return Function("return 1 | " + comp + ";")(); 
} 
first_is_bigger([0, 1, 2]) // false 
first_is_bigger([0, -1, -2]) // true 

説明:

array = [1, 2, 3]; 
comp = array.join(" && " + array[0] + " > "); 
// comp = "1 && 1 > 2 && 1 > 3" 
exec_comp = Function("return " + comp + ";"); 
// exec_comp = function() { return 1 && 1 > 2 && 1 > 3; } 
exec_comp() 
// false 

問題:0 && anythingは常にfalseです:

array = [0, -1, -2] 
comp = array.join(" && " + array[0] + " > "); 
// comp = "0 && 0 > -1 && 0 > -2" 
exec_comp = Function("return " + comp + ";"); 
// exec_comp = function() { return 0 && 0 > -1 && 0 > -2; } 
exec_comp() 
// false :-(

修正:1 | anythingは常に0と異なる:

exec_comp = Function("return 1 | " + comp + ";"); 
// exec_comp = function() { return 1 | 0 && 0 > -1 && 0 > -2; } 
exec_comp() 
// true :-) 

警告:動的評価の不適切な使用は、問題の私の理解によると

0

:-(インジェクション攻撃のためにあなたのコードを開き、私たちは与えられた要素が配列の最大値であるかどうかを確認する予定(特定のケースでは最初のもの)。私はより一般的なfunctionを実装しています。ここでは任意の要素に対してこれを確認できますが、indexの0がデフォルトです。

function isHigher(input, index) { 
    if (index === undefined) { 
     index = 0; 
    } 
    for (var i in input) { 
     if ((i !== index) && (input[i] > input[index])) { 
      return false; 
     } 
    } 
    return true; 
} 

コールisHigher(a) 0番目の要素が最大であるかどうかを確認します。5番目の要素についてこれをチェックする場合は、isHigher(a, 5)を呼び出してください。

関連する問題