Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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,我正在尝试实现以下代码: var data = []; var devicesObj = {}; var devices = clients.map(function(k) { return k.os; }); devices.sort(); var current = null; var cnt = 0; for (var i = 0; i <= devices.length; i++) { if (devices[i] !== current) {

我正在尝试实现以下代码:

var data = [];
var devicesObj = {};
var devices = clients.map(function(k) {
    return k.os;
});

devices.sort();

var current = null;
var cnt = 0;

for (var i = 0; i <= devices.length; i++) {
    if (devices[i] !== current) {
        if (cnt > 0) {
            devicesObj.label = current;
            devicesObj.value = cnt;
        }
            data.push(devicesObj);
            current = devices[i];
            cnt = 1;
        } else {
            cnt++;
        }

}
执行代码后,我得到以下结果:

[
  {
    "label": "Apple iPhone",
    "value": 2
  },
  {
    "label": "Apple iPhone",
    "value": 2
  },
  {
    "label": "Apple iPhone",
    "value": 2
  },
  {
    "label": "Apple iPhone",
    "value": 2
  },
  {
    "label": "Apple iPhone",
    "value": 2
  },
  {
    "label": "Apple iPhone",
    "value": 2
  }
]

请帮忙

你一次又一次地推同一个物体。试试这个:

for (var i = 0; i < devices.length; i++) {
    if (devices[i] !== current) {
        if (cnt > 0) {
            data.push({label: current, value: cnt});
        }
        current = devices[i];
        cnt = 0;
    }
    cnt++;
}
if (cnt > 0) {
    data.push({label: current, value: cnt});
}

有许多问题。一是重用同一个对象,这就是为什么所有数组元素都具有相同的值

另一个原因是,循环中的逻辑有故障,无法正确解释数据的所有配置方式,并在不应该的情况下不断将值推送到数组中


还有一个问题是,你正在使用@JLRishe,它确实在使用,但它不应该使用:我现在看起来好多了。
for (var i = 0; i < devices.length; i++) {
    if (devices[i] !== current) {
        if (cnt > 0) {
            data.push({label: current, value: cnt});
        }
        current = devices[i];
        cnt = 0;
    }
    cnt++;
}
if (cnt > 0) {
    data.push({label: current, value: cnt});
}