Javascript forEach - TypeError: Невозможно установить свойство undefined - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть следующий массив, который я хочу реструктурировать

    {
        "feedId": 1,
        "status": "read",
        "count": 105
    },
    {
        "feedId": 2,
        "status": "read",
        "count": 46
    },
    {
        "feedId": 3,
        "status": "read",
        "count": 29
    }

Когда я использую следующую функцию, я получаю ошибку TypeError: Невозможно установить свойство read для undefined.

    var feeds = [];

    statusCountGrouped.forEach(function(item) {
        feeds[item.feedId][item.status] = item.count;
    });

Почему это не работает?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вы получаете ошибку, потому что feeds[item.feedId] не определен до назначения.Вы должны инициализировать его перед присвоением значения feeds[item.feedId]

var feeds = [];

i.forEach(function(item) {
    if (feeds[item.feedId] === undefined) feeds[item.feedId] = [];
    feeds[item.feedId][item.status] = item.count;
});

Надеюсь, это поможет.

0 голосов
/ 26 декабря 2018

feeds [item.feedId] не инициализирован.Самое простое решение - при необходимости инициализировать в foreach.У меня есть два решения, которые вы предпочитаете:

1 /

const statusCountGrouped = [
  {
      "feedId": 1,
      "status": "read",
      "count": 105
  },
  {
      "feedId": 2,
      "status": "read",
      "count": 46
  },
  {
      "feedId": 3,
      "status": "read",
      "count": 29
  }
];

var feeds = [];

statusCountGrouped.forEach(function(item) {
    if(feeds[item.feedId] === undefined) { feeds[item.feedId] = {}; }
    feeds[item.feedId][item.status] = item.count;
});

console.log(feeds);

2 /

const statusCountGrouped = [
  {
      "feedId": 1,
      "status": "read",
      "count": 105
  },
  {
      "feedId": 2,
      "status": "read",
      "count": 46
  },
  {
      "feedId": 3,
      "status": "read",
      "count": 29
  }
];

var feeds = [];

statusCountGrouped.forEach(function(item) {
  feeds[item.feedId] = feeds[item.feedId] || {};
  feeds[item.feedId][item.status] = item.count;
});

console.log(feeds);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...