Как исправить: «TypeError: Невозможно прочитать свойство 'Id' undefined" в NodeJS (TypeScript) - PullRequest
1 голос
/ 06 июля 2019

У меня проблема с моим кодом. Я пытаюсь найти элемент в массиве со следующим кодом

Name()
{
    console.log(LoadItems.ItemConfigs);
    var ItemConfig = LoadItems.ItemConfigs.find(itemconf => itemconf.Id === this.ConfigId);    
    if(ItemConfig != undefined){
        return ItemConfig.Name;
    } else {
        return "ERROR";
    }
}

Но он показывает мне ошибку, упомянутую в заголовке каждый раз. Как вы можете видеть ранее, я распечатал массив в консоли для отладки, он дает мне много таких объектов:

ItemConfig {
Id: 25,
Name: 'Accessories',
Category: 'ITEM_CLOTH_ACC',
Density: 0,
Weight: 0,
Value1: '7',
Value2: 'NO_VALUE_SET',
Value3: 'NO_VALUE_SET',
Value4: 'NO_VALUE_SET',
Value5: 'NO_VALUE_SET' },

Я не знаю, почему я получаю эту ошибку, даже если программа знает объекты. Точная ошибка, которую я получаю, следующая:

Invalid argument: expected Number/opt/gameserver/packages/yeet/Models/Item.js:53: TypeError: Cannot read property 'Id' of undefined
    var ItemConfig = LoadItems.ItemConfigs.find(itemconf => itemconf.Id == this.ConfigId);

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Просто взглянув на код, который вы разместили, кажется, вы ничего не делаете неправильно. Я быстро попытался воспроизвести вашу проблему и, кажется, работает нормально (как вы можете видеть в следующем фрагменте). Пожалуйста, сверьтесь с моим кодом и посмотрите, сможете ли вы найти проблему.

Удалите все пустые объекты из вашего массива, чтобы быть на безопасной стороне

let ConfigId = 25;
let LoadItems = {
    ItemConfigs: Array()
};
LoadItems.ItemConfigs = [{},{
        Id: 25,
        Name: 'Accessories',
        Category: 'ITEM_CLOTH_ACC',
        Density: 0,
        Weight: 0,
        Value1: '7',
        Value2: 'NO_VALUE_SET',
        Value3: 'NO_VALUE_SET',
        Value4: 'NO_VALUE_SET',
        Value5: 'NO_VALUE_SET'
    },{},{}];


//Remove empty objects from the object array
 LoadItems.ItemConfigs = LoadItems.ItemConfigs.filter(item=> Object.keys(item).length !== 0);
function Name() {
    console.log(LoadItems.ItemConfigs);
    var ItemConfig = LoadItems.ItemConfigs.find(itemconf => itemconf.Id === ConfigId);
    if (ItemConfig != undefined) {
        return ItemConfig.Name;
    }
    else {
        return "ERROR";
    }
}
;
console.log(Name());
0 голосов
/ 06 июля 2019

, если у вас есть эта структура для LoadItems.ItemConfigs, нет проблем. но возможно LoadItems.ItemConfigs доза не имеет такой структуры

var LoadItems = {};
var ConfigId = 20;


LoadItems.ItemConfigs = [{
  Id: 20,
  Name: 'test_Accessories',
  Category: 'ITEM_CLOTH_ACC',
  Density: 0,
  Weight: 0,
  Value1: '7',
  Value2: 'NO_VALUE_SET',
  Value3: 'NO_VALUE_SET',
  Value4: 'NO_VALUE_SET',
  Value5: 'NO_VALUE_SET' },{
  Id: 25,
  Name: 'Accessories',
  Category: 'ITEM_CLOTH_ACC',
  Density: 0,
  Weight: 0,
  Value1: '7',
  Value2: 'NO_VALUE_SET',
  Value3: 'NO_VALUE_SET',
  Value4: 'NO_VALUE_SET',
  Value5: 'NO_VALUE_SET' }]

function Name()
{
    console.log(LoadItems.ItemConfigs);
    var ItemConfig = LoadItems.ItemConfigs.find(itemconf => itemconf.Id === this.ConfigId);    
    if(ItemConfig != undefined){
        return ItemConfig.Name;
    } else {
        return "ERROR";
    }
}

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