.sort返回一个只包含一个元素的地图

时间:2018-04-16 10:46:24

标签: javascript node.js

我有一个地图包含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}

3 个答案:

答案 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]);