Как упростить операторы else-if, где оценка текстовой строки имеет то же имя, что и добавляемый массив? (JavaScript) - PullRequest
1 голос
/ 21 июня 2019

Ниже приведен ряд операторов else-if, которые после оценки добавляются в массив с тем же именем, что и жестко заданные строки в операторе вычисления.Я знаю, что должен быть довольно простой способ сделать это более эффективным, но я не могу придумать решение, которое не слишком усложняет.

Код:

name = [];
name2 = [];
name3 = [];
name4 = [];
name5 = [];
name6 = [];
name7 = [];
name8 = [];
name9 = [];
name10 = [];
name11 = [];
name12 = [];
name13 = [];

if (categoryObject.category === 'name1') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name1.push(element);
});
} else if (categoryObject.category === 'name2') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name2.push(element);
    });
} else if (categoryObject.category === 'name3') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name3.push(element);
    });
} else if (categoryObject.category === 'name4') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name4.push(element);
    });
} else if (categoryObject.category === 'name5') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name5.push(element);
    });
} else if (categoryObject.category === 'name6') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name6.push(element);
    });
} else if (categoryObject.category === 'name7') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name7.push(element);
    });
} else if (categoryObject.category === 'name8') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name8.push(element);
    });
} else if (categoryObject.category === 'name9') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name9.push(element);
    });
} else if (categoryObject.category === 'name10') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name10.push(element);
    });
} else if (categoryObject.category === 'name11') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name11.push(element);
    });
} else if (categoryObject.category === 'name12') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name12.push(element);
    });
} else if (categoryObject.category === 'name13') {
    categoryObject.data.yAxis.forEach(element => {
        // console.log('y: ' + element);
        this.name13.push(element);
    });
}

Ответы [ 3 ]

1 голос
/ 21 июня 2019

Почему бы не использовать динамический подход и опустить локальные переменные, которые не имеют ничего общего с this.

categoryObject.data.yAxis.forEach(element => {
    // create array, if not exist
    this[categoryObject.category] = this[categoryObject.category] || [];
    // push value
    this[categoryObject.category].push(element);
});
0 голосов
/ 21 июня 2019

Вы можете хранить массивы в объекте и использовать категорию в качестве ключа.

var storage = {
  name: [],
  name2: [],
  name3: [],
  name4: [],
  name5: [],
  name6: [],
  name7: [],
  name8: [],
  name9: [],
  name10: [],
  name11: [],
  name12: [],
  name13: []
}
categoryObject.data.yAxis.forEach(element => {
  // console.log('y: ' + element);
  storage[categoryObject.category].push(element);
});
0 голосов
/ 21 июня 2019

Поскольку ваш ключ категории соответствует именам переменных вашего массива, вы можете использовать динамический ключ, основанный на категории.

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

// Stores the dynamic key
const key = categoryObject.category;

// Appends an array of variables (yAxis data) to one of your arrays using a dynamic key
this[key].concat(categoryObject.data.yAxis);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...