arrayの最初の値が他の値よりも高いか低いかを比較するための推奨方法は何ですか?配列の最初の値を他の値と比較する
するvar A = [8,3、114,34,0,2]
下で私が比較するように値場合I [0]よりも高いか低い配列を有しますjsを介して他の配列値。 EDIT:予想されるvar結果:配列内に8よりも高い値があるため、結果は8です。
例2:VARのB = [34、2、23、8] 予想される出力:高く、他のすべての番号が[0]
arrayの最初の値が他の値よりも高いか低いかを比較するための推奨方法は何ですか?配列の最初の値を他の値と比較する
するvar A = [8,3、114,34,0,2]
下で私が比較するように値場合I [0]よりも高いか低い配列を有しますjsを介して他の配列値。 EDIT:予想されるvar結果:配列内に8よりも高い値があるため、結果は8です。
例2:VARのB = [34、2、23、8] 予想される出力:高く、他のすべての番号が[0]
よりも低いので、最善の方法は、1で始まるforloopあろう。
for(i = 1; i < a.length;i++){
if(a[0] > a[i])
{
//do something
}
else if(a[0] < a[i])
{
//do something
}
}
@DawnPatrolあなたのアドバイスに従えば、彼は存在しない配列要素、つまり[a.length]にアクセスしようとしています。このソリューションに問題はありません。彼は最初の要素をそれ自体と比較する必要がないので、i = 1で始まります。 –
良い点、コメントが削除されました。 – DawnPatrol
あなたはそれはあなたが厳格な電子に対して次の
var min = Math.min.apply(null, a);
var max = Math.max.apply(null, a);
テストなどの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"
// 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));
面白いトリック:
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 :-)
警告:動的評価の不適切な使用は、問題の私の理解によると
:-(インジェクション攻撃のためにあなたのコードを開き、私たちは与えられた要素が配列の最大値であるかどうかを確認する予定(特定のケースでは最初のもの)。私はより一般的な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)
を呼び出してください。
値を繰り返し処理するために 'for'ループを使用してください。次に、他のアイテムと比較するために「if」を選択します。 – zerkms
@zerkmsに同意してください。時間の複雑さはN未満ではありません。各値を少なくとも1回比較して比較する必要があるためです。 – Devesh
いくつかの値よりも高くなく、他の値よりも低く、他の値と同じではありませんか?あるいは、それが全部よりも高いか低いかを意味します。たとえば、出力を上、下、下、上、上にしたいでしょうか? –