计算数组内对象的迭代次数

Posted

技术标签:

【中文标题】计算数组内对象的迭代次数【英文标题】:Count iterations of an object inside an array 【发布时间】:2021-04-28 02:43:15 【问题描述】:

我有一个从数据库返回数组的变量。在该数组中,我需要计算特定对象迭代的实例。

我尝试使用 jQuery.each 并记录输出以进行检查,但只是在控制台中获得了单独的结果。我没有得到想要的计数。在下面的示例中,我希望看到: 尺寸 2 - 计数 1 尺寸 4 - 计数 2

样本输出

   0: Email: "example@mai.com", Name: "Bob Smith", ​Number: "555-555-1234", Size: "2"
    
    1:  Email: "example2@mai.com",  Name: "Jenny Girl", ​Number: "222-333-1234",  Size: "4"
    
    2:   Email: "example3@mai.com",   Name: "Johnny on the spot",  ​Number: "111-777-1234",  Size: "4"

使用 jquery 实现这一目标的最佳方法是什么?正在使用.size之类的东西吗?

我尝试过的代码:

​​function xyz() 
jQuery.ajax(
data: action: 'my_action',
type: 'post',
url: my_ajax.ajax_url,
dataType: 'JSON',
success: function(data) 
jQuery.each(data, function(key,val)
var n = Object.keys(val.Size).size;
console.log(n);
        );

​​​​ ​​这给了我一个“未定义”的控制台日志读数。

【问题讨论】:

【参考方案1】:

您可以将 Size 的值存储为 Object 的属性并进行计数:

// Just for demo - that's your data response:
const data = [Size: "2", Size: "4", Size: "4", Size: "99"]; 

const sizes = data.reduce((ob, item) => 
  if (!ob.hasOwnProperty(item.Size)) ob[item.Size] = 0;
  ++ob[item.Size];
  return ob;
, );

console.log(sizes);

【讨论】:

谢谢!使用这个我必须手动定义大小还是可以动态读取它? @user14955679 我不明白这个问题......上面最重要的只是属性总是被称为Size 区分大小写。没有其他的。如果不迭代 Array 中的每个项目,您将无法自动确定累积计数。 在代码const response = [Size: "2", Size: "4", Size: "4"]; 中您必须手动输入每个尺寸。是否可以用 (data) 替换它并让它拉出大小然后计算它们?希望这更有意义 如果你对Size 属性感兴趣,你需要定义它——硬编码它(就像上面的例子item.Size)。如果Size 不是您要硬编码的属性,则创建一个函数,该函数接受您要使用的属性名称而不是“大小”作为参数 - 而不是 item.Size 使用 @987654330 @ 不客气!这是一个有用的文档:developer.mozilla.org/en/docs/Web/javascript/Reference/…【参考方案2】:

var data = [
  Email: "example@mai.com", Name: "Bob Smith", Number: "555-555-1234", Size: "2",
  Email: "example2@mai.com", Name: "Jenny Girl", Number: "222-333-1234",  Size: "4",
  Email: "example3@mai.com", Name: "Johnny on the spot", Number: "111-777-1234",  Size: "4"
];

const sizes = data
    // collect each "Size" value from the data
    .map(e => e.Size)
    // use an object to count each instance
    .reduce((a, n) => (...a, [n]: (a[n] || 0) + 1 ), )

// log each object entry to the console
Object.entries(sizes)
    .forEach(([size, count]) => console.log(`size: $size count: $count`));

【讨论】:

以上是关于计算数组内对象的迭代次数的主要内容,如果未能解决你的问题,请参考以下文章

使用PHP与2个foreach循环中的数组进行比较时如何获取迭代次数

求助:如何修改迭代算法的最大迭代次数

sh 在范围内运行可迭代任务次数

sh 在范围内运行可迭代任务次数

执行 PHP 循环直到数组结束或达到一定的迭代次数?

Python中的嵌套循环