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

时间:2015-08-07 05:38:38

标签: javascript arrays data-structures coding-style ecmascript-6

我多次见过这种模式:

<style name="Theme.YourTheme" parent="android:style/Theme">
    <item name="android:actionBarStyle">@style/Theme.YourTheme.Styled.ActionBar</item>
</style>

<style name="Theme.YourTheme.Styled.ActionBar">
    <item name="android:titleTextStyle">@style/Theme.Viadeo.Styled.YourTheme.TitleTextStyle</item>
</style>

<style name="Theme.YourTheme.Styled.ActionBar.TitleTextStyle" parent="@android:style/Widget.TextView">
    <item name="android:textSize">12dp</item>
</style>

使用JavaScript对象的一个​​问题就像它们在关联数组中的地方一样,就是不可能使用方便的数组方法,如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; } lengthfilter等。

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

map

1 个答案:

答案 0 :(得分:1)

使用对象没有什么问题,您只需要确保您的密钥不会与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;
}