Получить ключ массива подмассива с наибольшим значением

1

У меня есть массив в javascript с этой структурой:

controllers: Array(2)
    0: Object
        vram: 4095
    1: Object
        vram: 1024

Этот массив создается через si.graphics. Могут быть больше под-массивов с разными значениями.

Мне нужно как-то вернуть только индекс контроллера с наибольшим количеством vram. Я нашел другие вопросы о стеке о чем-то подобном, но, похоже, только с плоскими массивами, но этот массив многомерен.

Я не очень многого добился, потому что я просто не знаю, с чего начать.

Как я могу получить индекс sub-массива с наибольшим количеством vram?

Это не дубликат, потому что он фокусируется на получении самого высокого значения, которое довольно тривиально и не является тем, что я/просил.

  • 7
    Это ни массив, ни объект
  • 0
    @Luca Лука Я не имел в виду, что структура - это то, как создается массив. Просто, что это текущая структура массива, я просто показываю вам значения и как он настроен. Я не спрашиваю, допустим ли массив.
Показать ещё 11 комментариев
Теги:
arrays

4 ответа

1
Лучший ответ

Вы можете уменьшить массив, проверив значение и со значением последнего максимального значения.

var controllers = [{ vram: 4095 }, { vram: 1024 }],
    maxIndex = controllers.reduce(
        (r, { vram }, i, a) => !i || vram > a[r].vram ? i : r,
        undefined
    );

console.log(maxIndex);
  • 0
    Я использовал это в своем проекте. Спасибо.
1

Просто повторите операцию controllers объектами controllers и проверьте каждое значение vram, сохраняя всегда самый высокий, выполнит трюк

let controllers =  [
    {"vram":4095},  // index 0
    {"vram":1024},  // index 1
    {"vram":55555}, // index 2
    {"vram":123}    // index 3...
];

let max = 0;
for(let i in controllers){ 
    if(controllers[i].vram > controllers[max].vram ) max = i
}

console.log(max); // outputs 2
  • 0
    Это был мой первоначальный план, но я хотел знать, есть ли лучший / более эффективный способ. В любом случае, спасибо за ответ!
1

Используйте что-то вроде ниже

var controllers = {
    0: {
        vram: 4096
    },
    1: {
        vram: 1024
    },
    2: {
        vram: 1024
    }
};

var max = -999999,
  maxKey = -1;


for(var key in controllers) {
  if(controllers[key]['vram'] > max) {
    max = controllers[key]['vram'];
    maxKey = key;
  }
}

console.log(maxKey);
console.log(max);
  • 0
    Я думаю, the index of the sub-array with the most vram означает, что ему нужен максимальный vram и его ключ! @Luca
  • 0
    Это неправильно @ Saeed.Ataee - мне просто нужен индекс.
Показать ещё 3 комментария
1

Если вы просто пытаетесь получить самое высокое значение, следующая функция в фрагменте кода сделает то, что вам нужно:

const myArray = [
  {vram: 100},
  {vram: 200},
  {vram: 150}
]

function getHighestVram(array){
  let highestVram = 0;
  for (i in array){
    if(array[i].vram > highestVram) {
      highestVram = array[i].vram;
    }
  }
  return highestVram;
}
    
const maxVram = getHighestVram(myArray);

console.log(maxVram);

Если вы хотите найти индекс с самым высоким vram, вы можете использовать аналогичную функцию. Как это:

const myArray = [
  {vram: 100},
  {vram: 200},
  {vram: 150}
]

function getHighestVram(array){
  let highestVram = 0;
  let highestVramIndex;
  for (i in array){
    if(array[i].vram > highestVram) {
      highestVram = array[i].vram;
      highestVramIndex = i;
    }
  }
  return highestVramIndex;
}
    
const maxVramIndex = getHighestVram(myArray);

console.log(maxVramIndex);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню