gpt4 book ai didi

javascript - 在 JavaScript ES6 中使用对象作为索引数组是一个好的模式吗?

转载 作者:行者123 更新时间:2023-11-28 00:00:13 25 4
gpt4 key购买 nike

我已经多次看到这种模式:

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 对象的一个​​问题是无法使用方便的数组方法,例如 lengthfiltermap

那么,使用数组会更好吗?

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com