计算javascript对象中的出现次数

Count occurrences in javascript object

本文关键字:javascript 对象 计算      更新时间:2023-09-26

Object {green: 3, red: 2, blue: 1, yellow: 1, mint: 3}

我想循环遍历这个对象,并返回数组中出现次数最多(按值)的键。在这种情况下,它将像["mint", "green"]一样是薄荷色和绿色的。

到目前为止,我得到了这个

for (var i = 0; i < key(obj).length; i++) {
  ... // no idea
}

感谢任何帮助或指导。非常感谢。

var obj = {"green": 3, "red": 2, "blue": 1, "yellow": 1, "mint": 3},
    keys = Object.keys(obj),    // get all keys as array
    max = Math.max.apply(Math, keys.map(function(key) { return obj[key]; })),    // find the biggest number of occurrences
    result;
	
result = keys.filter(function(key) {    // find the relevant keys
	return obj[key] == max;
});
console.log(result);

您可以执行以下操作:

var someObjects = {
  green: 3,
  red: 2,
  blue: 1,
  yellow: 1,
  mint: 3
};
function findOccurances(of, inn) {
  var array = [];
  for (var obj in inn) {
    if (someObject[obj] == of) {
      array.push(obj);
    }
  }
  return array;
}

var data = {green: 3, red: 2, blue: 1, yellow: 1, mint: 3}
var maxProperty = null, maxValue = -1;
for (var prop in data) {
  if (data.hasOwnProperty(prop)) {
    var value = data[prop]
    if (value > maxValue) {
      maxProperty = prop
      maxValue = value
    }
  }
}

您需要这个:

var maxValue = -10000000;
for(var prop in obj) {
 if(!obj.hasOwnProperty(prop)) {
  continue;
 }
 if(obj[prop] > maxValue) {
  maxValue = obj[prop];
 }
}
// show maxValue

注意:您需要obj.hasOwnProperty(prop),因为js中的对象有一些特殊的属性,而在循环中不需要这些属性。

编辑:我认为应该有一个更深思熟虑的解决方案。这里有一个:

var bar = { green: 3, red: 2, blue: 1, yellow: 1, mint: 3 };
var findMaxProperties = function (foo) {
  var keys = Object.keys(foo);
  var max = keys.map(function (key) {
    return foo[key];
  }).reduce(function (previous, current) {
    return Math.max(previous, current);
  });
  return keys.filter(function (key) {
    return foo[key] == max;
  });
};
var result = findMaxProperties(bar);
$('#result').text(result);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="result"></div>

如果我正确理解你的问题(如果是这样的话,那么你真的需要编辑它:),那么你想浏览一个对象,找到它具有最高数值的属性。如果是这样的话,那么一些类似的东西就会起作用。

var foo = { green: 3, red: 2, blue: 1, yellow: 1, mint: 3 };
var maxValue = Number.MIN_VALUE, maxValueProperties = [];
for (var key in foo) {
  if(foo[key] == maxValue) {
    maxValueProperties.push(key);
  }
  if(foo[key] > maxValue) {
    maxValue = foo[key];
    maxValueProperties = [];
    maxValueProperties.push(key);
  }  
}
$('#result').text(maxValueProperties);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="result">result</div>