我有一个包含状态列表的数组,例如:
["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);
最佳答案
我认为你的意思是一种不那么冗长的方式。您可以使其更短,但这样更具可读性。
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/