Javascript 将阵列推送到一个阵列,然后循环浏览新阵列

Javascript 将阵列推送到一个阵列,然后循环浏览新阵列,javascript,arrays,loops,frequency,Javascript,Arrays,Loops,Frequency,我需要遍历几个数组,以了解特定值显示的频率 我可以将值传递给一个新数组,这是可行的,但是当我尝试循环它时,它似乎不起作用 因为这是针对类的,所以我不能单独使用jQuery逻辑 var mon = ["Ez, Caro"]; var tue = ["Ez, Matt, Pablo"]; var wed = ["Marta"]; var thur = ["Ez, Matt"]; var freq = 0; var arr = []; var input = prompt ("Search a na

我需要遍历几个数组,以了解特定值显示的频率

我可以将值传递给一个新数组,这是可行的,但是当我尝试循环它时,它似乎不起作用

因为这是针对类的,所以我不能单独使用jQuery逻辑

var mon = ["Ez, Caro"];
var tue = ["Ez, Matt, Pablo"];
var wed = ["Marta"];
var thur = ["Ez, Matt"];
var freq = 0;
var arr = [];

var input = prompt ("Search a name");

arr.push(mon, tue, wed, thur);

for (var i = 0; i<arr.length; i++){
  if (arr[i] == input){

    freq = freq + 1;
  }

}
document.write("It appears " + freq + " time(s)")
var mon=[“Ez,Caro”];
var tue=[“Ez,Matt,Pablo”];
var wed=[“Marta”];
var-thur=[“Ez,Matt”];
var-freq=0;
var-arr=[];
var输入=提示(“搜索名称”);
星期一、星期二、星期三、星期四;

对于(var i=0;i问题是,使用
Array.push
您正在创建一个数组数组,而不是合并它们,这是此处所需的结果。请查看
Array.concat
,或尝试ES6
spread
语法。

关闭,但不完全关闭。push将整个元素插入数组中。这包括以下事实:他是个大人物

arr = [["Ez, Caro"], ["Ez, Matt, Pablo"], ["Marta"], ["Ez, Matt"]]
您正在查找
concat
,或者通过按其索引号(即
0
0)抓取元素来选择数组中的字符串本身

arr.push(mon[0], tue[0], wed[0], thur[0]);


作为旁注,您不必将其写为
freq=freq+1;
freq+=1
是每个人都使用的惯例。

通过使用push函数,您正在创建数组数组。因此,您可以使用嵌套循环来迭代此二维数组。因此,您的代码将是

        var mon = ["Ez", "Caro"];
        var tue = ["Ez", "Matt", "Pablo"];
        var wed = ["Marta"];
        var thur = ["Ez", "Matt"];
        var freq = 0;
        var arr = [];
        var input = prompt ("Search a name");
        arr.push(mon, tue, wed, thur);
        for (i = 0; i<arr.length; i++)
            for(j = 0; j < arr.length; j++)
                if (arr[i][j] == input)
                    freq++;
        document.write("It appears " + freq + " time(s)")
var mon=[“Ez”,“Caro”];
var tue=[“Ez”、“Matt”、“Pablo”];
var wed=[“Marta”];
var-thur=[“Ez”,“Matt”];
var-freq=0;
var-arr=[];
var输入=提示(“搜索名称”);
星期一、星期二、星期三、星期四;

对于(i=0;i以下代码应该可以工作。它是用ES6编写的,如果您对此不满意,请告诉我

const mon = ["Ez", "Caro"];
const tue = ["Ez", "Matt", "Pablo"];
const wed = ["Marta"];
const thur = ["Ez", "Matt"];

const names = [...mon, ...tue, ...wed, ...thur]

const input = prompt ("Search a name");

const freq = names.filter(a => a===input).length

document.write("It appears " + freq + " time(s)")

假设每个数组都应该有多个字符串,而不是像问题中那样只有一个字符串,您可以使用vanilla JavaScript执行以下操作

var mon=[“Ez”,“Caro”];
var tue=[“Ez”、“Matt”、“Pablo”];
var wed=[“Marta”];
var-thur=[“Ez”,“Matt”];
//组合您的阵列以简化操作
var arr=周一星期二、周三、周四;
//将对象用作贴图以跟踪计数
var-map={};
for(设i=0;iconsole.log(input+'出现'+countOfRequested+'次');
您可以将数组的所有成员组合到一个数组中,并使用来汇总您要查找的输入

要组合这些值,可以使用:

或更旧版本的javascript(我使用apply来不改变数组):

下面是一个运行示例:

var mon=[“Ez”,“Caro”];
var tue=[“Ez”、“Matt”、“Pablo”];
var wed=[“Marta”];
var-thur=[“Ez”,“Matt”];
//ES6
var combinedArray=[…周一,…周二,…周三,…周四];
//ES5
//var combinedArray=[].concat.apply([],[mon,tue,wed,thur]);
功能计数器输入(输入,arr){
var count=arr.REDUCT(函数(和、当前){
如果(当前===输入){
总和+=1;
}
回报金额;
}, 0);
返回计数;
}
变量输入='Ez';
var count=countInput(输入,组合阵列);

console.log(“count of“+input+”-”,count);
首先要看的是你的数组。因为你有引号,我认为你没有得到期望的值。例如,在
mon
中,我相信你期望的是两个值:“Ez”和“Caro”但是,缺少引号表示数组中只有一个元素:“Ez,Caro”。请将数组改为如下所示:

var mon = ["Ez", "Caro"];
var tue = ["Ez", "Matt", "Pablo"];
var wed = ["Marta"];
var thur = ["Ez", "Matt"];
var freq = 0;
然后,您可以这样创建
arr

var arr = [].concat(mon, tue, wed, thur);
这需要一个空数组(
[]
),并包含您正在查看的4个数组。从这里开始,循环应该可以正常工作。因此,整个过程:

var mon = ["Ez", "Caro"];
var tue = ["Ez", "Matt", "Pablo"];
var wed = ["Marta"];
var thur = ["Ez", "Matt"];
var freq = 0;
var arr = [].concat(mon, tue, wed, thur);

var input = prompt ("Search a name");

for (var i = 0; i<arr.length; i++){
  if (arr[i] == input){

    freq = freq + 1;
  }

}
document.write("It appears " + freq + " time(s)");
var mon=[“Ez”,“Caro”];
var tue=[“Ez”、“Matt”、“Pablo”];
var wed=[“Marta”];
var-thur=[“Ez”,“Matt”];
var-freq=0;
var arr=[].concat(周一、周二、周三、周四);
var输入=提示(“搜索名称”);

对于(var i=0;i,可以只使用嵌套循环:

 const days = [mon, tue, wed, thur];

 let freq = 0, input = "Ez";

 for(const day of days){
    for(const person of day){
        if(person === input) freq++;
    }
 }

您的每个数组都包含一个字符串…您的意思是
var mon=['Ez','Caro'];
…等等?似乎每个数组中都有一个项目(mon,tue,wed,thur)这是对的还是错别字?@Xavvier chazsolo是的,你是对的。对此感到很愚蠢,所以修复了它,但仍然说当你做
arr.push(周一、周二、周三、周四)
时,每个值都会出现0次
arr=[[“Ez,Caro”],[“Ez,Matt,Pablo”],[“Marta”],[“Ez,Matt”]
这是一个数组数组,在验证中,
if(arr[i]==input)
您正在比较数组和字符串(
[Ez,Caro]='Ez,Caro'
),这就是为什么
freq
变量没有change@stesand希望你的问题…干杯!谢谢!!非常感谢!!
var arr = [].concat(mon, tue, wed, thur);
var mon = ["Ez", "Caro"];
var tue = ["Ez", "Matt", "Pablo"];
var wed = ["Marta"];
var thur = ["Ez", "Matt"];
var freq = 0;
var arr = [].concat(mon, tue, wed, thur);

var input = prompt ("Search a name");

for (var i = 0; i<arr.length; i++){
  if (arr[i] == input){

    freq = freq + 1;
  }

}
document.write("It appears " + freq + " time(s)");
 const days = [mon, tue, wed, thur];

 let freq = 0, input = "Ez";

 for(const day of days){
    for(const person of day){
        if(person === input) freq++;
    }
 }