Я продолжаю получать нулевые значения после добавления нового элемента в мой объект

У меня есть объект массива с некоторыми похожими значениями. Я исключаю их повторяющиеся значения с помощью цикла, а затем добавляю значения к моему другому объекту (objectProperties), он работает нормально, однако я получаю значения NULL внутри категории

   // data which im extracting
var data = [ 
   {
      "label":"May 14",
      "value":56714.4,
      "proID":"ISB"
   },
   {
      "label":"May 14",
      "value":15902.5,
      "proID":"LI8"
   },
   {
      "label":"May 14",
      "value":419.6,
      "proID":"TR2"
   },
   {
      "label":"May 15",
      "value":2754.8,
      "proID":"DAC"
   },
   {
      "label":"May 15",
      "value":50845.7,
      "proID":"ISB"
   },
   {
      "label":"May 15",
      "value":19760.3,
      "proID":"LI8"
   },
   {
      "label":"May 15",
      "value":1704.1,
      "proID":"TR2"
   },
   {
      "label":"May 16",
      "value":2145.6,
      "proID":"DAC"
   },
   {
      "label":"May 16",
      "value":55666.4,
      "proID":"ISB"
   },
   {
      "label":"May 16",
      "value":15044.4,
      "proID":"LI8"
   },
   {
      "label":"May 16",
      "value":2413.5,
      "proID":"TR2"
   },
   {
      "label":"May 17",
      "value":6564.4,
      "proID":"DAC"
   },
   {
      "label":"May 17",
      "value":71379,
      "proID":"ISB"
   },
   {
      "label":"May 17",
      "value":21774.2,
      "proID":"LI8"
   },
   {
      "label":"May 17",
      "value":2191.4,
      "proID":"TR2"
   },
   {
      "label":"May 18",
      "value":63338.9,
      "proID":"ISB"
   },
   {
      "label":"May 18",
      "value":24451,
      "proID":"LI8"
   },
   {
      "label":"May 18",
      "value":2616.5,
      "proID":"TR2"
   }
];

var propertiesObject = {    // my object
    type: 'mscolumn2d',
     renderAt: 'chart-container',
     width: '1000',
     height: '500',
     dataFormat: 'json', 
     dataSource: {
        chart: {
            caption: "Kilos per Date Comparison"
          
            }, 
    categories: [
            {
                category: [] 
            }
        ]
 
 
    }
 };
 
    var propCount = Object.keys(data).length; // getting object length
    var checkSameLabel = data[0].label;    // for reference reference inside the loop
    var firstIndex = {"label":data[0].label}; // im taking first index of object and add manually
    propertiesObject.dataSource.categories[0].category[0] = firstIndex; // adding the first index to my object
    var currentProject = data[0].proID, counterCurrentProject = 0;
    for(let i = 0; i < propCount; i++) {
        if (checkSameLabel !== data[i].label) { // check if current value of label is not equal then add new data to my object 
            
            const value = data[i].label;
            var obj = { 
                "label": value  
            };
            propertiesObject.dataSource.categories[0].category[i] = value; // adding new data
        }  
        checkSameLabel = data[i].label; // for the next check
    }
    console.info(JSON.stringify(propertiesObject));
    document.getElementById("result").innerHTML = JSON.stringify(propertiesObject);
<div id = "result"></div>

Я ожидаю, что вывод будет таким внутри "категории"

{ "label": "May 14" },
{ "label": "May 15" },
{ "label": "May 16" },
{ "label": "May 17" }

Я не знаю, это из-за моего цикла или я делаю что-то не так.

извините, в свойствахObject.dataSource.categories[0].category[i] = value; это должно быть propertiesObject.dataSource.categories[0].category[i] = obj;

Meraki 29.05.2019 10:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вместо назначения индексам массива используйте вместо этого push, иначе у вас будут пустые значения:

// data which im extracting
var data = [{
    "label": "May 14",
    "value": 56714.4,
    "proID": "ISB"
  },
  {
    "label": "May 14",
    "value": 15902.5,
    "proID": "LI8"
  },
  {
    "label": "May 14",
    "value": 419.6,
    "proID": "TR2"
  },
  {
    "label": "May 15",
    "value": 2754.8,
    "proID": "DAC"
  },
  {
    "label": "May 15",
    "value": 50845.7,
    "proID": "ISB"
  },
  {
    "label": "May 15",
    "value": 19760.3,
    "proID": "LI8"
  },
  {
    "label": "May 15",
    "value": 1704.1,
    "proID": "TR2"
  },
  {
    "label": "May 16",
    "value": 2145.6,
    "proID": "DAC"
  },
  {
    "label": "May 16",
    "value": 55666.4,
    "proID": "ISB"
  },
  {
    "label": "May 16",
    "value": 15044.4,
    "proID": "LI8"
  },
  {
    "label": "May 16",
    "value": 2413.5,
    "proID": "TR2"
  },
  {
    "label": "May 17",
    "value": 6564.4,
    "proID": "DAC"
  },
  {
    "label": "May 17",
    "value": 71379,
    "proID": "ISB"
  },
  {
    "label": "May 17",
    "value": 21774.2,
    "proID": "LI8"
  },
  {
    "label": "May 17",
    "value": 2191.4,
    "proID": "TR2"
  },
  {
    "label": "May 18",
    "value": 63338.9,
    "proID": "ISB"
  },
  {
    "label": "May 18",
    "value": 24451,
    "proID": "LI8"
  },
  {
    "label": "May 18",
    "value": 2616.5,
    "proID": "TR2"
  }
];

var propertiesObject = { // my object
  type: 'mscolumn2d',
  renderAt: 'chart-container',
  width: '1000',
  height: '500',
  dataFormat: 'json',
  dataSource: {
    chart: {
      caption: "Kilos per Date Comparison"

    },
    categories: [{
      category: []
    }]


  }
};

var propCount = Object.keys(data).length; // getting object length
var checkSameLabel = data[0].label; // for reference reference inside the loop
var firstIndex = {
  "label": data[0].label
}; // im taking first index of object and add manually
propertiesObject.dataSource.categories[0].category[0] = firstIndex; // adding the first index to my object
var currentProject = data[0].proID,
  counterCurrentProject = 0;
for (let i = 0; i < propCount; i++) {
  if (checkSameLabel !== data[i].label) { // check if current value of label is not equal then add new data to my object 

    const value = data[i].label;
    var obj = {
      "label": value
    };
    propertiesObject.dataSource.categories[0].category.push(obj);
  }
  checkSameLabel = data[i].label; // for the next check
}
console.info(propertiesObject);
<div id = "result"></div>

Вы также можете упростить ситуацию, используя Set для отслеживания добавленных меток и forEach просматривая данные:

// data which im extracting
var data = [{
    "label": "May 14",
    "value": 56714.4,
    "proID": "ISB"
  },
  {
    "label": "May 14",
    "value": 15902.5,
    "proID": "LI8"
  },
  {
    "label": "May 14",
    "value": 419.6,
    "proID": "TR2"
  },
  {
    "label": "May 15",
    "value": 2754.8,
    "proID": "DAC"
  },
  {
    "label": "May 15",
    "value": 50845.7,
    "proID": "ISB"
  },
  {
    "label": "May 15",
    "value": 19760.3,
    "proID": "LI8"
  },
  {
    "label": "May 15",
    "value": 1704.1,
    "proID": "TR2"
  },
  {
    "label": "May 16",
    "value": 2145.6,
    "proID": "DAC"
  },
  {
    "label": "May 16",
    "value": 55666.4,
    "proID": "ISB"
  },
  {
    "label": "May 16",
    "value": 15044.4,
    "proID": "LI8"
  },
  {
    "label": "May 16",
    "value": 2413.5,
    "proID": "TR2"
  },
  {
    "label": "May 17",
    "value": 6564.4,
    "proID": "DAC"
  },
  {
    "label": "May 17",
    "value": 71379,
    "proID": "ISB"
  },
  {
    "label": "May 17",
    "value": 21774.2,
    "proID": "LI8"
  },
  {
    "label": "May 17",
    "value": 2191.4,
    "proID": "TR2"
  },
  {
    "label": "May 18",
    "value": 63338.9,
    "proID": "ISB"
  },
  {
    "label": "May 18",
    "value": 24451,
    "proID": "LI8"
  },
  {
    "label": "May 18",
    "value": 2616.5,
    "proID": "TR2"
  }
];

var propertiesObject = { // my object
  type: 'mscolumn2d',
  renderAt: 'chart-container',
  width: '1000',
  height: '500',
  dataFormat: 'json',
  dataSource: {
    chart: {
      caption: "Kilos per Date Comparison"

    },
    categories: [{
      category: []
    }]
  }
};

const labelsAdded = new Set();
data.forEach(({ label }) => {
  if (labelsAdded.has(label)) {
    return;
  }
  labelsAdded.add(label);
  propertiesObject.dataSource.categories[0].category.push({ label });
});
console.info(propertiesObject);

Или, создав набор строк меток, а затем используя .map:

// data which im extracting
var data = [{
    "label": "May 14",
    "value": 56714.4,
    "proID": "ISB"
  },
  {
    "label": "May 14",
    "value": 15902.5,
    "proID": "LI8"
  },
  {
    "label": "May 14",
    "value": 419.6,
    "proID": "TR2"
  },
  {
    "label": "May 15",
    "value": 2754.8,
    "proID": "DAC"
  },
  {
    "label": "May 15",
    "value": 50845.7,
    "proID": "ISB"
  },
  {
    "label": "May 15",
    "value": 19760.3,
    "proID": "LI8"
  },
  {
    "label": "May 15",
    "value": 1704.1,
    "proID": "TR2"
  },
  {
    "label": "May 16",
    "value": 2145.6,
    "proID": "DAC"
  },
  {
    "label": "May 16",
    "value": 55666.4,
    "proID": "ISB"
  },
  {
    "label": "May 16",
    "value": 15044.4,
    "proID": "LI8"
  },
  {
    "label": "May 16",
    "value": 2413.5,
    "proID": "TR2"
  },
  {
    "label": "May 17",
    "value": 6564.4,
    "proID": "DAC"
  },
  {
    "label": "May 17",
    "value": 71379,
    "proID": "ISB"
  },
  {
    "label": "May 17",
    "value": 21774.2,
    "proID": "LI8"
  },
  {
    "label": "May 17",
    "value": 2191.4,
    "proID": "TR2"
  },
  {
    "label": "May 18",
    "value": 63338.9,
    "proID": "ISB"
  },
  {
    "label": "May 18",
    "value": 24451,
    "proID": "LI8"
  },
  {
    "label": "May 18",
    "value": 2616.5,
    "proID": "TR2"
  }
];

var propertiesObject = { // my object
  type: 'mscolumn2d',
  renderAt: 'chart-container',
  width: '1000',
  height: '500',
  dataFormat: 'json',
  dataSource: {
    chart: {
      caption: "Kilos per Date Comparison"

    },
    categories: [{
      category: [...new Set(data.map(({ label }) => label))].map(label => ({ label }))
    }]
  }
};
console.info(propertiesObject);

Есть несколько ошибок

  1. Вы создали переменную obj, но не используете ее

var obj = { 
    "label": value  
};

// No good
propertiesObject.dataSource.categories[0].category[i] = value;

// Should be this, but still not correct, see point (2)
propertiesObject.dataSource.categories[0].category[i] = obj;
  1. Вы добавляете элементы в массив, устанавливая его с помощью индекса, вместо этого вы должны использовать массив push
// No good
propertiesObject.dataSource.categories[0].category[i] = obj;

// Should be
propertiesObject.dataSource.categories[0].category.push(obj);

// data which im extracting
var data = [ 
   {
      "label":"May 14",
      "value":56714.4,
      "proID":"ISB"
   },
   {
      "label":"May 14",
      "value":15902.5,
      "proID":"LI8"
   },
   {
      "label":"May 14",
      "value":419.6,
      "proID":"TR2"
   },
   {
      "label":"May 15",
      "value":2754.8,
      "proID":"DAC"
   },
   {
      "label":"May 15",
      "value":50845.7,
      "proID":"ISB"
   },
   {
      "label":"May 15",
      "value":19760.3,
      "proID":"LI8"
   },
   {
      "label":"May 15",
      "value":1704.1,
      "proID":"TR2"
   },
   {
      "label":"May 16",
      "value":2145.6,
      "proID":"DAC"
   },
   {
      "label":"May 16",
      "value":55666.4,
      "proID":"ISB"
   },
   {
      "label":"May 16",
      "value":15044.4,
      "proID":"LI8"
   },
   {
      "label":"May 16",
      "value":2413.5,
      "proID":"TR2"
   },
   {
      "label":"May 17",
      "value":6564.4,
      "proID":"DAC"
   },
   {
      "label":"May 17",
      "value":71379,
      "proID":"ISB"
   },
   {
      "label":"May 17",
      "value":21774.2,
      "proID":"LI8"
   },
   {
      "label":"May 17",
      "value":2191.4,
      "proID":"TR2"
   },
   {
      "label":"May 18",
      "value":63338.9,
      "proID":"ISB"
   },
   {
      "label":"May 18",
      "value":24451,
      "proID":"LI8"
   },
   {
      "label":"May 18",
      "value":2616.5,
      "proID":"TR2"
   }
];

var propertiesObject = {    // my object
    type: 'mscolumn2d',
     renderAt: 'chart-container',
     width: '1000',
     height: '500',
     dataFormat: 'json', 
     dataSource: {
        chart: {
            caption: "Kilos per Date Comparison"
          
            }, 
    categories: [
            {
                category: [] 
            }
        ]
 
 
    }
 };
 
    var propCount = Object.keys(data).length; // getting object length
    
    console.info(propCount)
    
    var checkSameLabel = data[0].label;    // for reference reference inside the loop
    var firstIndex = {"label":data[0].label}; // im taking first index of object and add manually
    propertiesObject.dataSource.categories[0].category[0] = firstIndex; // adding the first index to my object
    var currentProject = data[0].proID, counterCurrentProject = 0;
    for(let i = 0; i < propCount; i++) {
        if (checkSameLabel != data[i].label) { // check if current value of label is not equal then add new data to my object 
            
            const value = data[i].label;
            var obj = { 
                "label": value  
            };

            // Use Array.push() to add new data
            propertiesObject.dataSource.categories[0].category.push(obj); 
        }  
        checkSameLabel = data[i].label; // for the next check
    }
    console.info(JSON.stringify(propertiesObject));
    document.getElementById("result").innerHTML = JSON.stringify(propertiesObject);
<div id = "result"></div>

Другие вопросы по теме