【发布时间】:2019-08-17 12:20:33
【问题描述】:
我有一个要求,我需要将所有状态与每个区域连接起来,我在下面创建了一个示例:
但我不确定这是 lodash 中的最佳方式还是可以使用任何其他内置方法来更有效地创建。
var data = [ {
"region": "South",
"state": "Wyoming",
"sales": 1803
}, {
"region": "South",
"state": "Idaho",
"sales": 3380
}, {
"region": "South",
"state": "New Mexico",
"sales": 2779
}, {
"region": "South",
"state": "Montana",
"sales": 3589
}, {
"region": "South",
"state": "Utah",
"sales": 11223
}, {
"region": "South",
"state": "Oregon",
"sales": 17431
}, {
"region": "South",
"state": "Colorado",
"sales": 72110
}, {
"region": "South",
"state": "Arizona",
"sales": 45283
}, {
"region": "South",
"state": "Washington",
"sales": 88656
}, {
"region": "South",
"state": "California",
"sales": 55731
}, {
"region": "West",
"state": "Wyoming",
"sales": 1603
}, {
"region": "West",
"state": "New Mexico",
"sales": 4779
}, {
"region": "West",
"state": "Montana",
"sales": 5589
}, {
"region": "West",
"state": "Utah",
"sales": 11223
}, {
"region": "West",
"state": "Nevada",
"sales": 16729
}, {
"region": "West",
"state": "Oregon",
"sales": 17431
}, {
"region": "West",
"state": "Colorado",
"sales": 32110
}, {
"region": "West",
"state": "Arizona",
"sales": 35283
}, {
"region": "West",
"state": "Washington",
"sales": 138656
}, {
"region": "West",
"state": "California",
"sales": 457731
} ];
var cat = [];
_.forEach(_.uniq(_.map(data, 'region')), function(o){
_.forEach(_.uniq(_.map(data, 'state')), function(l) {
const fin = _.find(data, function(f) { return f.state == l && f.region == o; });
if (_.isUndefined(fin)) {
cat.push({'state': o + " - " + l, 'region': o, 'sales': 0});
} else {
cat.push({'state': o + " - " + l, 'region': o, 'sales': fin.sales});
}
});
});
console.log(cat);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
我之所以使用这个,是因为在上述数据中,南部地区似乎缺少某些州,而西部地区似乎缺少一些州。 但就我而言,我希望两个区域的状态数据相等,我使用了 lodash 函数,但我不确定这是否是最好的方法。
【问题讨论】:
标签: javascript jquery lodash