2016-11-06 4 views
1

Каков рекомендуемый способ сравнения, если первое значение в массиве выше или ниже других значений.Сравните первое значение в массиве с другими

У меня есть массив, как в ниже

вар а = [8,3, 114,34,0,2]

Я хочу сравнить, если значение а [0] выше или ниже, чем другие значения массива через js. EDIT: Ожидаемый результат var: 8 меньше, поскольку в массиве более высокие значения, чем 8.

Пример 2: вар б = [34, 2, 23, 8] ожидается выход: выше, так как все другие номера ниже, чем в [0]

+4

Используйте цикл 'for' для перебора значений. Затем 'if' сравнить с другими элементами. – zerkms

+0

Согласитесь с @zerkms, так как у вас не может быть сложности по времени меньше N, так как вам нужно пройти через каждое значение хотя бы один раз, чтобы сравнить. – Devesh

+1

Не может ли оно быть выше некоторых значений и ниже других и равно другим? Или вы имеете в виду, что он выше или ниже всех. Например, будет ли вы хотите быть выше, ниже, ниже, выше, выше? –

ответ

1

Лучший способ был бы forloop, начиная с 1.

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

Тестирование строгого е качества, а также ...

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 :-(

Fix: 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'th является ли элемент самый большой.Если вы хотите проверить это для пятого элемента, вызовите isHigher(a, 5)

Смежные вопросы