我已经多次看到这种模式:
var messages = {};
function addMessage(newMessage) {
messages[newMessage.id] = newMessage;
}
function numUnread() {
var unread = 0;
for (var id in messages) {
if (messages[id]) {
unread++;
}
}
return unread;
}
像使用关联数组一样使用 JavaScript 对象的一个问题是无法使用方便的数组方法,例如 length
、filter
、map
等
那么,使用数组会更好吗?
let messages = [];
function addMessage(newMessage) {
const newMessages = messages
.filter(msg => msg.id !== newMessage.id)
.push(newMessage);
messages = newMessages;
}
function numUnread() {
return messages.filter(msg => !msg.isRead).length();
}
最佳答案
使用对象并没有什么问题,您只需确保您的键不会与 Object.prototype
方法发生冲突。如果它们是数字 ID,那就很容易了。
但是,在 ES6 中,您应该只使用 Map
。这也可以让您轻松获得尺寸。不幸的是,它还没有类似数组的辅助方法,但它确实可以很好地与迭代器配合使用。
const messages = new Map();
function addMessage(newMessage) {
messages.set(newMessage.id, newMessage);
}
function numUnread() {
let unread = 0;
for (let {isRead} of messages.values())
if (!isRead)
unread++;
return unread;
}
关于javascript - 在 JavaScript ES6 中使用对象作为索引数组是一个好的模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870443/