Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为循环javascript对数组中的元素进行分类_Javascript_Arrays_Object - Fatal编程技术网

为循环javascript对数组中的元素进行分类

为循环javascript对数组中的元素进行分类,javascript,arrays,object,Javascript,Arrays,Object,我是JS的新手 我有一个数组和一个相同数组的对象 我想得到一个特定类别的总数 例如: 1.Critical: from 30-45 2.High: from 16-27 3.Medium: from 5-15 4.Low:from 3-4 我得到的数组布局有两种格式 从浏览器: slect_score [{…}]0: 4: 1 5: 3 15: 6 20: 1 30: 2 45:2 __proto__: O

我是JS的新手

我有一个数组和一个相同数组的对象

我想得到一个特定类别的总数

例如:

1.Critical: from 30-45
2.High: from 16-27
3.Medium: from 5-15 
4.Low:from 3-4
我得到的数组布局有两种格式

从浏览器:

    slect_score
    [{…}]0:
     4: 1
     5: 3
     15: 6
     20: 1
     30: 2
     45:2
     __proto__: Objectlength: 1__proto__: Array(0)
从浏览器:

    score_map
{4: 1, 5: 3, 15: 6, 20: 1, 30: 2, 45: 2}

__proto__:Object
总而言之,我想把数字分组,得到每个类别的总出现次数

对于上面的示例:我应该:

            1.Critical: 4
            2.High: 1
            3.Medium: 9
            4.Low: 1
以下是我的代码:我正在尝试将其插入Django模板:

        var score = document.getElementById("score").innerHTML;
        var score_array = [score.split(",").map(Number)];
        var score_array_a = score_array[score_array.length -1];
        var score_array_b = score_array_a.slice(0, -1);
        var score_sum = score_array_b.reduce(function(a, b){ return a +                         
        b;}, 0);
        var score_avg = parseFloat(score_sum / score_array_b.length);




        var score_map = score_array_b.reduce(function(obj, b) {
          obj[b] = ++obj[b] || 1;
          return obj;
        }, {});

        var slect_score = new Array(score_map);
在my Django模板中:

    <p  id=score>
    {% for asset in self.get_children %}{% for finding in        
     asset.get_children.specific %}
    {% with finding.Identification|mul:Reconize                 
    as ID_REC %}{{ID_REC|mul:Impact}},{% endwith %}{% 
    endfor %}{% endfor %}
    </p>

我真的很想感谢伯格尔先生。

有几种方法可以做到这一点。这里有一个方法

1-你有评分系统,但你需要以代码可以读取的方式安排它

一种方法是:

const scores = [{
  name: 'critical',
  low: 30,
  high: 45,
  count: 0
},{
  name: 'high',
  low: 16,
  high: 27,
  count: 0
},{
  name: 'medium',
  low: 5,
  high: 15,
  count: 0
},{
  name: 'low',
  low: 3,
  high: 4,
  count: 0
}]
这里有一个对象数组。每个对象有4个属性:名称、允许的最高值、允许的最低值和当前计数。我们稍后将在代码中对其进行修改

2-我们可以使用.forEach循环遍历该数组

scores.forEach(scoreObject => {
  console.log('This is '+ scoreObject.name)
  console.log('Highest value is '+ scoreObject.high)
  console.log('Lowest value is '+ scoreObject.low)
})
3-你也有每个分数的计数,但你必须能够循环通过它来将所有分数相加。这是一个javascript对象,循环遍历javascript对象的最佳方法是使用object.keys

const score_map = {
  4: 1,
  5: 3,
  15: 6,
  20: 1,
  30: 2,
  45: 2
}

const score_map_keys = Object.keys(score_map);
4-我们可以循环计算所有分数

score_map_keys.forEach(key => {
  let count = score_map[key];
  console.log('Key ' + key + ' has value ' + count);
});
5-现在我们可以把它们放在一起了。对于每一个分数,我们需要通过计数并将其全部相加

scores.forEach(scoreObject  => {
  console.log('Looking at ' + scoreObject.name);
  score_map_keys.forEach(key => {    
    let count = score_map[key];   
    if (key >= scoreObject.low && key <= scoreObject.high) {
      console.log(key + ' matches the allowed range');
      scoreObject.count = scoreObject.count+count
    }
  });
})

console.log(scores);
您可以在以下JSFIDLE中找到工作代码:


打开控制台ctr+shift+i并按run。

请发布您的代码欢迎使用Stack Overflow!请阅读,四处看看,并通读,特别是请发布定义对象的实际JavaScript代码,而不是在卸载对象时浏览器控制台显示的文本呈现。实际的代码更加清晰,我们可以更容易地帮助您。另外,即使您是新手,您最好的选择是进行相关主题的研究,并尝试一下。如果经过更多的研究和搜索,你陷入困境,无法摆脱困境,请发布一份你的尝试,并明确指出你陷入困境的地方。人们会很乐意帮忙的。如果有人有28个孩子会怎么样?高值为27,但临界值从30开始计算不能为28,它有一个固定的数字。为了计算的目的,Bergur,非常感谢你解释这个过程,并提供了一个很好的答案,很容易理解。你太棒了。
const score_map = {
  4: 1,
  5: 3,
  15: 6,
  20: 1,
  30: 2,
  45: 2
}

const score_map_keys = Object.keys(score_map);
score_map_keys.forEach(key => {
  let count = score_map[key];
  console.log('Key ' + key + ' has value ' + count);
});
scores.forEach(scoreObject  => {
  console.log('Looking at ' + scoreObject.name);
  score_map_keys.forEach(key => {    
    let count = score_map[key];   
    if (key >= scoreObject.low && key <= scoreObject.high) {
      console.log(key + ' matches the allowed range');
      scoreObject.count = scoreObject.count+count
    }
  });
})

console.log(scores);