string => any(`require`)的地图?

时间:2017-07-26 16:30:15

标签: javascript node.js ecmascript-6 ordereddictionary

我有一个需要有序元素的结构。以前使用{}。服务器端(Node.js)。

Map不支持任意内容,但我想要字符串索引而不是数组。替代?

gt.js

exports.gt = (a, b) => a > b;

lt.js

exports.lt = (a, b) => a < b;

operators.js

const operators = {lt: require('./lt'), gt: require('./gt')};

有序访问的方法:

// Option 0
const order = ['lt', 'gt'];
order.forEach(o => console.info(`option0::${o} =`, operators[o], ';'));

// Option 1
const operatorsList = [['lt', operators.lt], ['gt', operators.gt]];
console.info('option1::operatorsList =', operatorsList, ';');

// Option 2
const orderedMap = new Map(operatorsList);
console.info('option2::orderedMap =', orderedMap, ';');

输出:

option0::lt = { lt: [Function] } ;
option0::gt = { gt: [Function] } ;
option1::operatorsList = [['lt', {  lt: [Function]}],['gt', {  gt: [Function]}]] ;
option2::orderedMap = Map {'lt' => {lt: [Function]}, 'gt' => { gt: [Function]} } ;

第一个选项有效且允许高效访问,但可以更好地避免维护外部索引的开销。

2 个答案:

答案 0 :(得分:0)

您可以将订单存储在值中,如下所示:

const orderedObjects = {
  "somekey":{order: 0,value:"this is the first value"},
  "someotherkey":{order: 1,value:"this is the second value"},
  "anotherkey":{order: 2,value:"this is the third value"}
};

这个解决方案确实增加了一些膨胀,但它在过去对我来说很好。

答案 1 :(得分:0)

仅使用Map的选项2实际上可以正常工作,并且能够存储任意内容。我的调试问题是我使用console:\

登录JSON.stringify