获取具有最大值的子数组的数组键

时间:2018-05-04 18:52:50

标签: javascript arrays

我在这个结构的javascript中有一个数组:

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

此数组是通过si.graphics生成的。可以有更多具有不同值的子阵列。

我需要以某种方式返回具有最大vram的控制器的索引。我发现了其他关于类似东西的堆栈问题,但看起来只有扁平数组,但这个数组是多维的。

我没有尝试过很多事情,因为我根本不知道从哪里开始。

如何获得具有最大vram的子数组的索引?

This并不重复,因为它专注于获取最高价值,这非常微不足道,而不是我所要求的。

4 个答案:

答案 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);




答案 1 :(得分: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);




答案 2 :(得分: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);

答案 3 :(得分:1)

只需迭代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