Более эффективный способ проверить все условия из ответа forEach, используя javascript - PullRequest
0 голосов
/ 22 января 2020

У меня есть <select>, отправляющее значение option (указано ниже). Затем значение передается в React Hook. Это работает, но есть ли более сухой / чистый / более эффективный способ go с помощью условных выражений?

Выбор параметров

const animals = [
  "Cows", "Pigs", "Sheep", "Goats", "Lambs", "Rabbits"
]

Функция

const _updateLocationData = (value) => { 
    var tempLocations = [];
    locations.forEach(function(res) {
        if (value === "Cows" && res.Cows === "Yes") {
            tempLocations.push(res);
        }
        if (value === "Pigs" && res.Pigs === "Yes") {
            tempLocations.push(res);
        }
        if (value === "Sheep" && res.Sheep === "Yes") {
            tempLocations.push(res);
        }
        if (value === "Goats" && res.Goat === "Yes") {
            tempLocations.push(res);
        }
        if (value === "Lambs" && res.Lamb === "Yes") {
            tempLocations.push(res);
        }
        if (value === "Rabbits" && res.Rabbit === "Yes") {
            tempLocations.push(res);
        }
    });
}

Ответы [ 2 ]

1 голос
/ 22 января 2020

Рассмотрим что-то вроде этого: просто подтвердите, что value находится в нужном массиве, а затем проверьте, что [value] prop res равно "Yes":

const animals = [
  "Cows", "Pigs", "Sheep", "Goats", "Lambs", "Rabbits"
]

const _updateLocationData = (value) => { 
    var tempLocations = [];
    locations.forEach(function(res) {
        if (animals.includes(value) && res[value] === "Yes") {
            tempLocations.push(res);
        }
    });
}
0 голосов
/ 22 января 2020

Вы можете использовать метод filter для фильтрации массива.

const animals = [
    "Cows", "Pigs", "Sheep", "Goats", "Lambs", "Rabbits"
];

let locations = [
    { Cows: 'Yes', },
    { Pigs: 'Yes', },
    { Sheep: 'Yes', },
    { Goats: 'Yes', },
    { Lambs: 'Yes', },
    { Rabbits: 'Yes', },
];

const _updateLocationData = (value) => {
    var tempLocations = locations.filter(res => (animals.includes(value) && res[value] === 'Yes'));
    console.log(tempLocations);
}

   _updateLocationData('Cows');

   _updateLocationData('Pigs');
   _updateLocationData('Sheep');
   _updateLocationData('Goats');
...