我有一个地图包含10个条目,如" logs"中的前10行所示。以下部分。地图填充了以下值:
const featuresMap = {};
for (const feature of features) {
featuresMap[feature.getName()] = feature.getPriority();
logger.info(': ++++++featuresMap ', featuresMap, '++++++');
}
const sortedFeaturesPerPriority = this.sortFeaturesPerPriority(featuresPrioritiesTags);
logger.info('[delayOrchestration]: featuresPrioritiesTagsSORTED : ', sortedFeaturesPerPriority);
然后我尝试使用#34; code_sorting"部分中显示的代码根据其值对地图进行排序。 问题在于" code_sorting"中的排序方法。在下面发布的只是返回最后一项而不是地图包含所有已排序的项目。
请告诉我如何根据地图的值排序所有条目的地图。
code_sorting :
sortFeaturesPerPriority(map) {
const mapSorted = Object
.keys(map)
.sort((a, b) => map[a] - map[b])
.reduce((a, c) => (a[c] = map[c], a), {});
logger.info('[sortFeaturesPerPriority] mapSorted: ', mapSorted);
return mapSorted;
}
日志:
INFO: [ProgramFactory] : ++++++featuresMap [["TEST",1]]++++++
INFO: [ProgramFactory] : ++++++featuresMap [["TEST",1]]++++++
INFO: [ProgramFactory] : ++++++featuresMap [["TEST",1]]++++++
INFO: [ProgramFactory] : ++++++featuresMap [["TEST",5]]++++++
INFO: [ProgramFactory] : ++++++featuresMap [["TEST",5]]++++++
INFO: [ProgramFactory] : ++++++featuresMap [["TEST",2]]++++++
INFO: [ProgramFactory] : ++++++featuresMap [["TEST",2]]++++++
INFO: [ProgramFactory] : ++++++featuresMap [["TEST",2]]++++++
INFO: [ProgramFactory] : ++++++featuresMap [["TEST",2]]++++++
INFO: [ProgramFactory] : ++++++featuresMap [["TEST",6]]++++++
//logs from the sorting method
[sortFeaturesPerPriority] mapSorted: {"TEST":6}
[delayOrchestration]: featuresPrioritiesTagsSORTED : {"TEST":6}
答案 0 :(得分:2)
看起来每个功能都返回了相同的名称“TEST'”,因此您每次都会覆盖相同的属性。
答案 1 :(得分:0)
该代码存在一些问题。您只获得最后一个{"TEST":6}
的事实是因为您正在创建该对象的属性,并且它们具有相同的名称,因此每次都会被覆盖,只生成一个属性的对象。你不能拥有这样的对象属性:
const obj = {
test: 1,
test: 2
}
作为第二个test
覆盖第一个mapSorted
。
另一个问题是即使您更改了这些属性的名称,您也要将它们排序为一个新对象,您无法保证它们将保持排序状态,因为对象属性的排序不需要遵循它们的创建顺序。
您可以像这样更改const mapSorted = Object
.keys(map)
.sort((a, b) => map[a] - map[b])
.map(item => {
return { [item]: map[item] }
});
,看看它是否符合您的需求。
File currDir = new File(".");
String path = currDir.getAbsolutePath();
// String path = "C:\\ExternalFiles\\"; // Or you can give staticly
File jsonNetworkDetailsFile = new File(path);
答案 2 :(得分:0)
如果需要排序结构,则需要使用数组(而不是对象)。 有几种方法可以继续。
@Matus Dubrava的答案为您提供了一个包含{name:priority}等排序元素的数组。
另一种方法是从头开始处理数组:
const featuresMap = [];
for (const feature of features) {
featuresMap.push({name: feature.getName(), priority: feature.getPriority()});
}
const sortedMap = featuresMap.sort((a, b) => a.priority - b.priority)
否则,如果您只需要排序名称:
const sortedNames = Object.keys(map).sort((a, b) => map[a] - map[b]);