获取最小值的密钥

Mer*_*rnt 18 javascript arrays object

我有一个像这样的数组: arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49, …}

我正在尝试使用Javascript获得最低的键值。

我尝试过的

alert(Math.min.apply(Math, arr));返回Infinity我不知道为什么

我在Google上下载了此文件,仅供尝试:

var keys = Object.keys(arr).map(Number).filter(function(a){
    return arr[a];
}); alert(Math.min.apply(Math, keys));
Run Code Online (Sandbox Code Playgroud)

回报Infinity

我想要更完整的东西,例如以下输出:“最低值为lst9中的2”。

在问这里之前,我真的尝试过自己修复它,但是没有成功!您能帮我解决此“ Infinity”问题吗?谢谢。

Jac*_*ord 16

您可以使用Object.entries以下方法获取键和值:

var arr = {
  lst1: 300,
  lst2: 381,
  lst3: 4,
  lst4: 4,
  lst5: 49
};

function lowestValueAndKey(obj) {
  var [lowestItems] = Object.entries(obj).sort(([ ,v1], [ ,v2]) => v1 - v2);
  return `Lowest value is ${lowestItems[1]}, with a key of ${lowestItems[0]}`;
}

var lowest = lowestValueAndKey(arr);
console.log(lowest);
Run Code Online (Sandbox Code Playgroud)

  • @Mernt IE不支持粗箭头符号。您需要用旧式Javascript重写`([[,v1],[,v2])=> v1-v2` (2认同)

Joh*_*edy 9

有几种方法可以达到您想要的。请查看以下方法:

const obj = { lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49 }
const values = Object.values(obj)
const lowest = Math.min.apply(null, values)

// Using Object.keys(), Object.values() and findIndex()
const keys = Object.keys(obj)
const indexOfLowest = values.findIndex(function (x) { return x === lowest })
console.log(`The lowest value is ${lowest} from ${keys[indexOfLowest]}`)



// OR Using Object.keys() and filter()
const key = Object.keys(obj).filter(function (x) { return obj[x] === lowest })[0]
console.log(`The lowest value is ${lowest} from ${key}`)



// OR Using Object.entries() and sort()
const [[lowestKey, lowestVal]] = Object.entries(obj).sort(function ([,valA], [,valB]) { return valA - valB });
console.log(`The lowest value is ${lowestVal} from ${lowestKey}`)
Run Code Online (Sandbox Code Playgroud)


小智 9

解决问题的方法有很多种,但这是解决问题的一种简单替代方法。基本上,这是一种蛮力做事的方式,您可以在每个属性中进行迭代以检查其值。

const obj = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49};

const getSmallest = function (object) {
  let smallestValue = Number.MAX_VALUE;
  let selectedKey = '';
  for (let key in object) {
    if (object[key] < smallestValue) {
      smallestValue = object[key];
      selectedKey = key;
    }
  }; 
  console.log(selectedKey, smallestValue)
  return `The lowest value is ${smallestValue} from ${selectedKey}`;
};

getSmallest(obj);
Run Code Online (Sandbox Code Playgroud)


Yos*_*ero 5

要仅获取最小数量,可以使用Math.min(...Object.entries(arr).map(o => o[1]))

const arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49};
const lowestValue = Math.min(...Object.entries(arr).map(o => o[1]));

console.log(lowestValue);
Run Code Online (Sandbox Code Playgroud)

要获得具有最小值的对象,可以使用Object.entries(arr).reduce((a, [k, v]) => a[Object.keys(a)[0]] < v ? a : {[k]: v}, {})

const arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49};
const lowestObj = Object.entries(arr).reduce((a, [k, v]) => a[Object.keys(a)[0]] < v ? a : {[k]: v}, {});

console.log(lowestObj);
Run Code Online (Sandbox Code Playgroud)