当前位置: 首页 > 知识库问答 >
问题:

递归循环通过数组并返回项目数?

岳浩宕
2023-03-14

如果以前有人问过这个问题,我很抱歉,但我找不到答案。如何循环使用嵌套数组的数组,并在控制台中打印项目出现的实例数?

因此console.log应该打印出名称“bob”的数字2,因为“bob”在数组中出现两次。

这是我的阵列和我目前拥有的:

    var names = ["bob", ["steve", "michael", "bob", "chris"]];

    function loop(arr, item) {
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] instanceof Array) {
          loop(arr[i], item);
        } else {
          if (arr[i] == item) {
            console.log(arr[i]);
          }
        }
      }
    }

    loop(names, "bob");

共有3个答案

梁丘权
2023-03-14

您还可以使用reduce

var names = ['bob', ['steve', 'michael', 'bob', 'chris', ['bob']]];

function count(item, items) {
  return items.reduce(function(sum, x) {
    if (Array.isArray(x)) return sum + count(item, x);
    if (x === item) return sum + 1;
    return sum;
  }, 0);
}

count('bob', names); // => 3

另一种选择是使用更通用的函数并将它们链接在一起。

  1. 展平输入数组;[1,[2,3,4,5,[6]]]=

看起来像这样

flatten(names).filter(x => x === 'bob').length

我将把flant的实现留给您作为练习

欧阳学真
2023-03-14

你需要一个柜台

js lang-js prettyprint-override">function loop(arr, item) {
    var count = 0;
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] instanceof Array) {
            count += loop(arr[i], item);
        } else {
            if (arr[i] == item) {
                count++;
                console.log(arr[i]);
            }
        }
    }
    return count;
}

var names = ["bob", ["steve", "michael", "bob", "chris"]],
    count = loop(names, "bob");

document.write(count);
纪俊良
2023-03-14

在这里,请注意,您可以在内部保留计数器值,以保持代码的其余部分更干净:

var names = ["bob", ["steve", "michael", "bob", "chris"]];

function loop(arr, item) {
  var result = 0;
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] instanceof Array) {
      result += loop(arr[i], item);
    } else {
      if (arr[i] == item) {
        result++;
      }
    }
  }
  return result;    
}


var result = loop(names, "bob");
console.log(result);
 类似资料:
  • 问题内容: 我想重复创建div,这些项目是函数返回的对象。但是,以下代码报告错误:达到10个$ digest()迭代。流产!jsfiddle在这里:http://jsfiddle.net/BraveOstrich/awnqm/ 问题答案: 简短的回答 :您真的需要这样的功能还是可以使用属性?http://jsfiddle.net/awnqm/1/ 长答案 为简单起见,我仅描述您的情况-ngRepe

  • 我写了3个方法来实现递归合并排序,参数数量有限(没有aux、lo、mid、hi)。我认为我的工作是这样的,但它并没有返回一个排序数组,尽管它在运行时没有任何编译错误。我已经摆弄了4个小时,似乎无法弄清楚我做错了什么,没有合并一个有序数组。我只从我的助教那里得到了非常模糊的输入,并且能够修复我正在遇到的一些问题,但是该方法仍然没有对项数组进行排序。欢迎任何关于我在这里做错了什么的建议。谢谢!

  • 如何在javascript中递归循环json对象数据键。 请检查以下json对象:

  • 问题内容: 我正在尝试显示10位玩家的表格。我通过ajax获取数据,并将其作为道具传递给我的孩子。 现在,我需要一个列表组件来渲染播放器: 这给了我一个。 我不确定发生了什么,我的控制台日志显示了正确的数据,但是以某种方式我无法在返回中访问它。 我想念什么? 问题答案: 在组件中,您需要更改初始状态,因为您正在尝试使用for,但是此属性是导致错误的原因。 此外,如在是你应该从它那里得到的属性

  • 我接受了一次采访,被问到一个问题,我想了解解决方案。 创建一个递归函数,该函数返回给定长度的数组的可能组合数,这些数组可以由非重复连续整数数组组成。 f(数组,长度)=组合 数组=[0,1,2,3] 长度=2 组合=10(所有组合:[0,0][0,1][0,2][0,3][1,1][1,2][1,3][2,2][2,3][3,3]) 请注意,允许使用[0,0],但不允许使用[1,0],因为定义了[

  • 我有一个递归函数,它会重复这个函数,直到不满足if条件,然后输出一个整数。但是,此函数之外需要整数的函数正在接收一个单位。我应该如何修改代码以返回int? 这就是整个程序 }