как вернуть идентификатор массива с максимальным значением c - PullRequest
0 голосов
/ 11 мая 2018

как вернуть идентификатор, чье значение c макс.Он должен вернуть id 1, потому что его значение c равно max

var array = [{"id":1,"c":5,"f":8},{"id":2,"c":3,"f":9},{"id":3,"c":4,"f":3}];

Ответы [ 8 ]

0 голосов
/ 11 мая 2018

Вы можете использовать array.sort((a,b) => b.c > a.c)[0].id; (расширение существующего ответа для удовлетворения требований ОП)

var array = [{"id":1,"c":5,"f":8},{"id":2,"c":3,"f":9},{"id":3,"c":4,"f":3}],
    maxCId = array.sort((a,b) => b.c > a.c)[0].id;

console.log( maxCId );
0 голосов
/ 11 мая 2018

Посмотрите на Лодаш

var array = [{"id":1,"c":5,"f":8},{"id":2,"c":3,"f":9},{"id":3,"c":4,"f":3}];

console.log(_.maxBy(array, 'c'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
0 голосов
/ 11 мая 2018

В таких случаях методы JavaScript Array (map, filter, Reduce) действительно полезны.

var array = [{"id":1,"c":5,"f":8},{"id":2,"c":3,"f":9},{"id":3,"c":4,"f":3}];

let max = Math.max.apply(null, array.map(el => el.c));
let ID = array.filter(el => el.c === 5)[0].id;

console.log(ID);
0 голосов
/ 11 мая 2018

Вы можете уменьшить объекты, проверив свойство объекта в одном цикле.

var array = [{ id: 1, c: 5, f: 8 }, { id: 2, c: 3, f: 9 }, { id: 3, c: 4, f: 3 }],
    maxC = array.reduce((a, b) => a.c > b.c ? a : b);
    
console.log(maxC);
console.log(maxC.id);

Чтобы получить больше объектов с одинаковым максимальным значением, вы можете использовать массив в качестве результирующего набора.

var array = [{ id: 1, c: 5, f: 8 }, { id: 2, c: 3, f: 9 }, { id: 3, c: 4, f: 3 }, { id: 4, c: 5, f: 3 }],
    maxC = array.reduce((r, o) => {
        if (!r || o.c > r[0].c) {
            return [o];
        }
        if (o.c === r[0].c) {
            r.push(o);
        }
        return r;
    }, undefined);
    
console.log(maxC);
0 голосов
/ 11 мая 2018

Если вам не нужны лямбда-функции, это должно быть довольно наглядно

function getMaxId ( array ) {
    var max_index = 0;
    var max = 0;

    for ( var i = 0; i < array.length; i++ ) {
        if( array[ i ].c > max ) {
            max = array[ i ].c;
            max_index = i;
        }
    }

    return array[ max_index ].id
}
0 голосов
/ 11 мая 2018

Сначала найдите максимальное значение.

var maxC = Math.max.apply(null, array.map( s => s.c ));

Теперь find пункт с maxC

var idWithMaxC = array.find( s => s.c === maxC ).id

Демо

var array = [{
  "id": 1,
  "c": 5,
  "f": 8
}, {
  "id": 2,
  "c": 3,
  "f": 9
}, {
  "id": 3,
  "c": 4,
  "f": 3
}];

var maxC = Math.max.apply(null, array.map(s => s.c));

var idWithMaxC = array.find(s => s.c === maxC).id

console.log(idWithMaxC);
0 голосов
/ 11 мая 2018

Вы можете попробовать следующее

var array = [{"id":1,"c":5,"f":8},{"id":2,"c":3,"f":9},{"id":3,"c":3,"f":3}];

var obj = {};
array.forEach((item) => {
  obj = !obj.id ? item : (obj.c > item.c ? obj : item);
});

console.log(obj); // gives object
console.log(obj.id); // gives id
0 голосов
/ 11 мая 2018

Сортировка по значению c и выбор первого индекса.

var array = [{"id":1,"c":5,"f":8},{"id":2,"c":3,"f":9},{"id":3,"c":4,"f":3}],
    max = array.sort((a,b) => b.c > a.c)[0];

console.log( max );
...