使用数组中的键获取最小值

共9个回答,已解决, 标签: javascript arrays object

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

我正在尝试使用 Javascript 使用密钥获得最低值。

我尝试过的:

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

我在谷歌上得到了这个, 只是为了尝试一下:

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

Infinity也返回

我想要更完整的东西, 如此输出: "最小值是 2 从 lst9"。

在这里问之前, 我真的尝试过自己修复它, 但没有成功!你能帮我解决这个 "无限" 问题吗?谢谢。

第1个答案(采用)

您可以使用以下方法获取密钥和值 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)[0];
  return Lowest value is ${lowestItems[1]}, with a key of ${lowestItems[0]};
}
第2个答案

有几种方法可以达到你想要的东西。请参阅以下方法:

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})
第3个答案

有很多方法可以解决你的问题, 但这里有一个简单的替代方法来解决。基本上, 它是一种蛮力的做事方式, 即循环访问每个属性以检查值。

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) {
    < smallestvalue)="" {="" smallestvalue="object[key];" selectedkey="key;" }="" };="" console.log(selectedkey,="" smallestvalue)="" return="" `the="" lowest="" value="" is="" ${smallestvalue}="" from="" ${selectedkey}`;="" };="" getsmallest(obj);="">
第4个答案

要只获取您可以使用的最小数量 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]));

要获取具有最小值的对象, 可以使用: 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};
< v="" a="" :="" {[k]:="" v},="" {});="">
第5个答案

在这里, 我们首先假设最小值、键和值分别作为第一个属性和值。然后我们遍历所有元素, 并与 minValue 进行比较, 以找到任何小于对象中的值。如果是, 那么我们更新最小值和 MinValue。无论如何, arr 类型是一个对象。它不是 javascript 中的数组。

var arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49};
var minkey = Object.keys(arr)[0];
var minValue = arr[Object.keys(arr)[0]];
for (var key in arr) {
    if (arr.hasOwnProperty(key)) {
        < minvalue){="" minvalue="arr[key];" minkey="key;" }="" }="" }="">
第6个答案

您可以尝试此操作:

obj = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49, lst9: 2}; // This is an object, That;s ehy you getting infinite

var arr = Object.keys( obj ).map(function ( key ) { return obj[key]; });

alert(Math.min.apply( null, arr ));

Https://jsfiddle.net/ozvubmdr/[](https://jsfiddle.net/ozvubmdr/)

第7个答案

很容易, 虽然不是最佳的, 因为它遍历数组两次: 找到最小的值, 然后找到属于它的键。

arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49, lst9: 2}
min = Math.min(...Object.values(arr));
minkey = Object.keys(arr).find(key => arr[key] = min);
console.log(`Lowest is ${min} at ${minkey}`);
第8个答案

您可以尝试以下操作:

const arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49, lst9: 2}
const minVal = Math.min(...Object.values(arr))
const fromKey = Object.keys(arr).find(key => arr[key] === minVal)
console.log(`The lowest value is ${minVal} from ${fromKey}`)
第9个答案

您可以使用 Object.entries 和使用 Array.reduce 将生成的 [键值] 对减少到具有最低条目的对象:

const data = {lst1: 300, lst2: -381, lst3: 4, lst4: 4, lst5: 49, lst6: -49, lst7: 0, lst7: 78, lst7: -90};
const obj = Object.entries(data).reduce((acc, [key, value]) =>{
  acc["lowest"] = acc["lowest"] ?  < value="" acc["lowest"]="" :="" {[key]="" :="" value}="" :="" {[key]="" :="" value="" };="" return="" acc;="" },="" {});="" console.log(`lowest="" value="" is="" found="" in="">

相关问题

如何从异步调用返回响应? 循环中的 JavaScript 闭包--简单的实际示例 如何从异步调用返回响应? "注意: 未定义的变量"、"注意: 未定义的索引" 和 "注意: 未定义的偏移量" 使用 PHP 删除数字数组中的所有重复数字 [重复] 使用数组中的键获取最小值 根据值从对象数组中选择属性: Javascript 将对象数组转换为对象