获取具有特定值的键计数的最简单方法

Simplest way to get count of keys with a particular value

本文关键字:最简单 方法 获取      更新时间:2023-09-26

给定一个javascript对象,获取具有特定值的键数的最简单方法是什么

例如,我有以下javascript对象(其中键表示测试脚本id,值表示脚本执行的结果):

var result = {1: "PASS", 2: "PASS", 3: "FAIL", 4: "PASS", 5: "FAIL"};

我想以最简单的方式获得值为"PASS"(在这种情况下为3)的密钥计数。

您将使用Object.keys和Array.filter:

var result = {1: "PASS", 2: "PASS", 3: "FAIL", 4: "PASS", 5: "FAIL"};
var passCount = Object.keys(result).filter(function(key){
   return ( result[key] === 'PASS' );
}).length;
function countKeys(data, expected) {
  return Object.keys(data).map(key => data[key] == expected).reduce((p, c) => p + c, 0);
}

取对象的键,比较每个键并转换为布尔值,然后将布尔值相加(强制它们为0表示false,1表示true,并求和)。

使用ES5,将其分解,您可以:

function countKeys(data, expected) {
  var keys = Object.keys(data);
  var checked = keys.map(function (key) {
    return data[key] == expected;
  });
  return checked.reduce(function (prev, cur) {
    return prev + cur;
  }, 0);
}

或者使用更旧的循环:

function countKeys(data, expected) {
  var keys = Object.keys(data);
  var count = 0;
  for (var i = 0; i < keys.length; ++i) {
    var value = data[key];
    if (value == expected) {
      ++count;
    } else {
      // do nothing or increment some failed counter
    }
  }
  return count;
}

只需过滤并获取长度。

var result = { 1: "PASS", 2: "PASS", 3: "FAIL", 4: "PASS", 5: "FAIL" };
function getCount(s, o) {
    return Object.keys(result).filter(function (k) { return o[k] === s; }).length;
}
document.write(getCount('PASS', result));

var result = {1: "PASS", 2: "PASS", 3: "FAIL", 4: "PASS", 5: "FAIL"};
undefined
function getCountByValue(obj,value){
  return Object.keys(result).filter(function(key){
  return result[key] === value
}).length
}
//as your wish
getCountByValue(result,'FAIL')
getCountByValue(result,'PASS')