ОШИБКА TypeError: Невозможно прочитать свойство 's_id' из неопределенного - PullRequest
0 голосов
/ 17 октября 2018

Я получаю от API два JSON:

Во-первых, это продукты:

 {
        "StatusCode": 0,
        "StatusMessage": "OK",
        "StatusDescription": [
             {
                "s_id": "11E8C70C8A5D78888E6EFA163EBBBC1D",
                "s_serial": "PkMGo",
                "active": 0,
              },
             {
                "s_id": "11E8C70FB9D10DB38E6EFA163EBBBC1D",
                "s_serial": "UgooX",
                "active": 0,
                },
              {
                "s_id": "11E8C7179F85836D8E6EFA163EBBBC1D",
                "s_serial": "IiLnM",
                "active": 0,
                }, .....
            {
                "s_id": "11E8C71905123F1A8E6EFA163EBBBC1D",
                "s_serial": "LVpcP",
                "active": 0,
             }
              }]
 }

Секунды, у меня есть этот JSON, который получается по продукту: homeboxp

{
    "StatusCode":0,
    "StatusMessage":"OK",
    "StatusDescription":
    {"products":[
            {
                "s_serial":"PkMGo",
                "s_id":"11E8C70C8A5D78888E6EFA163EBBBC1D"
            },
            {
                "s_serial":"LVpcP",
                "s_id":"11E8C71905123F1A8E6EFA163EBBBC1D"
            },
            {
                "s_serial":"IiLnM",
                "s_id":"11E8C7179F85836D8E6EFA163EBBBC1D"
            }
            ],
                "hb_id":"11E8C71242B742EC8E6EFA163EBBBC1D",
                "active":0,
          }
}

В этой части кода я получаю все формы API продуктов и нахожу для продуктов:

  product: Product;
  products: Product[]=[]

  selectedproducts : string = this.products.filter(
    x => x.s_id === this.product.s_id[0])
    .map(y => y.s_serial).join('');


    this.ss.getAllproducts ().subscribe(
      products => {
        this.products = products 
        if (this.products && this.products.length > 0) {
          for (let i = 0; i < this.products.length; i++) {
            let ss = products.find(x => x.s_id === this.homeboxp.products[i].s_id);
            console.log('ss', ss)
            if (ss) {
              this.selectedproducts = ss.s_serial[i]
            }
          }
        }
      });

У меня есть ошибка в этом let ss = products.find(x => x.s_id === this.homeboxp.products[i].s_id);

ОШИБКА TypeError: Не удается прочитатьсвойство 's_id' не определено в eval (edit-product.component.ts: 123) в Array.find () ошибка

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Есть несколько проблем с вашей реализацией -

  1. Я думаю, вы пропустили это ключевое слово this для продуктов в функции find.
  2. Неправильно index значениев настоящее время доступ.Вы должны проверить, существует ли продукт в массиве.

Попробуйте это -

product: Product;
  products: Product[]=[]

  selectedproducts : string = this.products.filter(
    x => x.s_id === this.product.s_id[0])
    .map(y => y.s_serial).join('');


    this.ss.getAllproducts ().subscribe(
      products => {
        this.products = products 
        if (this.products && this.products.length > 0) {
          for (let i = 0; i < this.products.length; i++) {
            let ss = this.products.find(x => {
            let p = this.homeboxp.products[i];
            return (p && x.s_id === p.s_id);

            );
            console.log('ss', ss)
            if (ss) {
              this.selectedproducts = ss.s_serial[i]
            }
          }
        }
      });
0 голосов
/ 17 октября 2018

Вы начинаете цикл с индекса 0 до длины this.products.length.Это твоя ошибка.Вы должны выполнить цикл до тех пор, пока this.products.length - 1 , потому что массивы начинают отсчитываться с 0. Таким образом, последний доступ к this.homeboxp.products [i] .s_id не установлен.

Измените свой код на:

for (let i = 0; i < this.products.length - 1; i++) {
        let ss = products.find(x => x.s_id === this.homeboxp.products[i].s_id);
        console.log('ss', ss)
        if (ss) {
          this.selectedproducts = ss.s_serial[i]
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...