为什么不能在该对象上使用forEach?

时间:2018-06-30 00:19:24

标签: javascript foreach

这有效

const itemsParent = document.querySelector('.items');
let items = [];

const renderItems = items => {

  items.forEach(item => {

    const div = document.createElement('div');
    div.className = 'item';

    div.innerHTML = `
      <img class="itemImgBackground" src="assets/${item.name.replace(" ", "")}.png">
      <img class="itemImg" src="assets/${item.name.replace(" ", "")}.png">
      <span class="itemName"><a href="item.html?id=${item.id}">${item.name}</a></span>
      <span class="itemCondition">${item.condition}</span>
      <span class="itemPrice">${item.price}</span>
    `;

    itemsParent.appendChild(div);

  });
}

db.collection('items').get().then((querySnapshot) => {
  console.log(typeof(querySnapshot));
  querySnapshot.forEach(doc => {
    docData = doc.data();
    docData['id'] = doc['id'];
    items.push(docData);
  });

  console.log(items);
  renderItems(items);

});

但这不是

const itemParent = document.querySelector('.item_full');
let params = new URLSearchParams(location.search);

var itemID = params.get('id');

var docRef = db.collection('items').doc(itemID);

docRef.get().then(doc => {
    doc.forEach(field => {
        console.log(field); 
    })
}).catch(function(error) {
    console.log("Error getting document:", error);
});

它们都是对象,所以没有意义。

1 个答案:

答案 0 :(得分:1)

您只能在实现Javascript iteration protocol的数组和某些类似数组的对象上使用R

.forEach()返回的对象是文档的集合,因此它实现了迭代协议。

db.collection().get()返回的对象只是一个文档。无需迭代单个项目,因此它不会实现此协议。只需直接访问属性即可。

db.collection().get().doc()