[英]Is it a good pattern to use an Object as an indexed array in JavaScript ES6?
我已经多次看到这种模式:
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
方法冲突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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.