javascript - 在 javascript 中订购键/值对集合的最佳实践?

标签 javascript collections

在 javascript/jQuery 中实现以下内容的有效(和用户友好)方法是什么?

根据文件的 mime 类型,应该执行回调。回调由开发人员通过提供带有可选通配符(例如 text/javascript、text/*、*/*)的 mime 类型描述和回调本身来定义。必须有一个指定的顺序,其中声明的类型与文件的给定 mime 类型相匹配。例如,text/plain 必须比 text/* 具有更高的优先级。

这里有一些想法:

使用一个简单的对象

var handler = {
 'text/javascript' : callback0,
 'text/*' : callback1
}

是最直观的解决方案,但顺序不能保证

维护两个列表

var order = ['text/javascript', 'text/*'];
var handler = [callback0, callback1];

如果类型超过两个或三个并且您使用匿名函数作为回调,这将很难维护。

通过将回调包装到对象中来添加索引

var handler = {
  'text/javascript' : {index: 0, callback0},
  'text/*' : {index: 1, callback1}
};

...在开头插入项目时更改数以千计的索引属性。

使用数组的数组

var handler = [
  ['text/javascript', callback0],
  ['text/*', callback1]
];

这可能比其他的对用户更友好,但是如果不遍历元素就无法直接访问已知的 mime 类型(如果有的话就好了)。

所以有一些方法可以做我想做的事情,但是正确的方法是什么(以及为什么)?也许有人有模式?

最好的, 黑扒

最佳答案

我会使用“简单对象”解决方案和订单数组形成“维护两个列表”解决方案。

使用使用 handler 简单对象的代码块遍历顺序数组来执行某些操作,要么中断循环,要么继续下一个循环迭代。

编辑以回应评论

我同意你的意见。我会做这样的事情来使它只有一个变量:

var handlers = {
  handler: {
    'text/javascript': callback0,
    'text/*': callback1
  },
  order: ["text/javascript", "text/*"]
};

尽管我会为 handlers 变量和/或 handlers.handler 属性选择更好的名称。

对另一条评论的另一条回复

也许你应该只修改 handlers.handlerhandlers.order one-mime-type-at-a-time:

var handlers = { handler: {}, order: [] }; // initialize as empty

// add 'text/javascript' mime type
handlers['text/javascript'] = callback0;
handlers.order.push('text/javascript');

// add 'text/*' mime type
handlers['text/*'] = callback1;
handlers.order.push('text/*');

那个方法填的有点重复,不过以后应该很容易维护。如果需要,您可以编写一个函数,将新属性添加到 handlers.handler 并将新的 mime 类型附加到 handlers.order

关于javascript - 在 javascript 中订购键/值对集合的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6415894/

相关文章:

java - Java 中的 Groupby 计数

c# - 枚举集合的不同方法

javascript - Margin-top/Padding-top 没有效果?

javascript - 使用 ajax 刷新页面时,Ruby on Rails 失败

javascript - 如何在一行中添加 Bootstrap 侧边栏和导航栏?

java - 在具有主键的类中覆盖 equals 方法而不破坏对称性

Java:从 Vector 中删除自定义对象

javascript - 等待 RootCtrl Angular $http 中的 promise

javascript - Firefox bug - 选项在悬停时消失

dictionary - 如何使用多维通配符索引构建集合类型以返回多个匹配项?