javascript - 从数组创建对象数组

标签 javascript arrays object highcharts

我有一个包含状态列表的数组,例如:

["New York", "Pennsylvania", "New Jersey", "Connecticut", "Maryland", "Delaware", "New York", "Pennsylvania"]

我想将该数组转换为对象数组,其中包含每个元素的计数,格式为:

[{"name":"New York","y":2},{"name":"Pennsylvania","y":2},{"name":"New Jersey","y":1},{"name":"Connecticut","y":1},{"name":"Maryland,"y":1}, {"name":"Delaware","y":1}]

下面是我的代码,以及代码的 JSFiddle 链接。有没有更好/更简洁的方法来做到这一点?谢谢!

var stateArr = ["New York", "Pennsylvania", "New Jersey", "Connecticut", "Maryland", "Delaware", "New York", "Pennsylvania", "New Jersey", "Connecticut", "Maryland", "Delaware", "New York", "Pennsylvania", "New Jersey", "New York", "Pennsylvania", "New Jersey", "New York", "Pennsylvania", "New Jersey", "Maryland", "Maryland", "Connecticut", "Delaware", "New Jersey", "New Jersey", "New York", "Pennsylvania", "Maryland", "Pennsylvania", "New Jersey", "Connecticut", "Maryland", "New York", "Pennsylvania"];

console.log(stateArr);

var stateCounts = {};

for (i = 0; i < stateArr.length; i++) {
    if (!stateCounts[stateArr[i]]) {
        stateCounts[stateArr[i]] = 0;
    }
    stateCounts[stateArr[i]]++;
}

console.log(stateCounts);


var stateNames = Object.keys(stateCounts);
var stateNamecounter = 0;

var stateSeries = [];

for (i = 0; i < Object.keys(stateCounts).length; ++i) {
    var obj = {
        name: stateNames[i],
        y: stateCounts[stateNames[i]]
    };
    stateSeries.push(obj);

}

console.log(stateSeries);

https://jsfiddle.net/ljd144/ok7x8Lny/

最佳答案

我认为你的意思是一种不那么冗长的方式。您可以使其更短,但这样更具可读性。

var sortedStateArr = stateArr.sort()

var comparisonElement = sortedStateArr[0] 
var result = [{ name : comparisonElement, y : 1 }]

for( var i = 1, n = sortedStateArr.length; i < n; i++) {
    if(comparisonElement != sortedStateArr[i] ) result.push({ name : sortedStateArr[i], y : 1 })
    else
        result[result.length - 1].y++
        comparisonElement = sortedStateArr[i]
}

console.log(result)

这是 jsFiddle :https://jsfiddle.net/Kalkut/47L4y3aq/

关于javascript - 从数组创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32077807/

相关文章:

c# - Array.Resize 是否删除旧数组?

javascript - 正确使用变压器与拦截器

Javascript 与 PHP——框架与库

arrays - 数组类型的类型保护

php - in_array() 不能按预期使用关联数组

javascript - 如何在运行时在javascript中将数组保存在对象中

javascript - Javascript 中更短的 if 语句

java - 使用Object类引用变量,访问不同的类成员。

javascript - Vuejs vee validate 验证所有表单输入

javascript - 从动态表单中删除多个元素的小 Javascript 问题