ajax查询将对象键值更改为索引

时间:2017-11-08 15:54:21

标签: javascript ajax firebase firebase-realtime-database promise

我正在使用firebase数据库,它有多个集合,并使用包含的代码,能够成功返回包含所有景点的数组,其area_id与e.target的area_id匹配。

但是,我的代码中的某些内容正在将attraction.id(不同于area_id的键)更改为数组中对象的索引。因此,id 1变为0,2变为1等等......

起初我以为它发生在Object.keys中,所以我在它之前放置了一个控制台日志,并且更改已经存在。所以,我几乎肯定它在查询中发生了。非常感谢任何帮助。

const getAttractionsByArea = (area_id) => {
  let attractions = [];
  return new Promise((resolve, reject) => {
    $.ajax(`https://theme-park.firebaseio.com/attractions.json?orderBy="area_id"&equalTo=${area_id}`)
      .then((results) => {
        Object.keys(results).forEach((result) => {
          results[result].id = result;
          attractions.push(results[result]);
        });
        resolve(attractions);
      }).catch((err) => {
        reject(err);
      });
  });
};

1 个答案:

答案 0 :(得分:0)

问题似乎是您在循环时将每个单独记录的ID设置为当前密钥索引。

请记住,Object.keys返回的字符串数组等于该对象的可枚举属性,在您的情况下是一个数组。这意味着您将获得一系列索引。

你有这一行

结果[结果] .id =结果;

您正在将每个元素的id设置为它的索引,因此如果db id中的元素为54,例如它现在被设置为1,如果它是您的集合中的第二个结果。

我不确定你为什么要在那里开始那条线,但是试着评论那条线并看看你得到了什么。