Сортировка массива объектов с помощью фильтра переменных - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь отфильтровать массив объектов по текущему месяцу. Используя скрещивание животных fi sh в качестве примера

const fishData = {
   "fish_name": "Barreleye",
   "price": "15,000",
   "location": "Sea",
   "shadow_size": "Small",
   "n_March": true,
   "n_3": true,

 },
 {
   "fish_name": "Coelacanth",
   "price": "15,000",
   "location": "Sea (Rainy Days)",
   "shadow_size": "Largest",
   "n_3": true,

 }
]

var today = new Date();
var currentMonth = today.getMonth();

var fishMonth = `n_ + ${currentMonth}`;
console.log(fishMonth);
var filteredFish = fishData.filter(function(i) {
    return i.fishMonth == true;
});

, теперь вернемся, если я поставлю "n_3" вместо "fishMonth", код работает нормально. Я проверил "fishMonth" и он возвращает n_3. Что бы помешало этому работать?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

В вашей переменной fishMonth есть лишний символ characeter, он должен быть:

var fishMonth = `n_${currentMonth}`;

, и вы также хотите прочитать ключ объекта, поэтому должно быть return i[fishMonth] == true;, попробуйте:

const fishData = [{
   "fish_name": "Barreleye",
   "price": "15,000",
   "location": "Sea",
   "shadow_size": "Small",
   "n_March": true,
   "n_3": true,

 },
 {
   "fish_name": "Coelacanth",
   "price": "15,000",
   "location": "Sea (Rainy Days)",
   "shadow_size": "Largest",
   "n_3": true,

 }
]

var today = new Date();
var currentMonth = today.getMonth();

var fishMonth = `n_${currentMonth}`;
var filteredFish = fishData.filter(function(i) {
    return i[fishMonth] == true;
});
console.log(filteredFish);
0 голосов
/ 16 апреля 2020

Вам нужно правильное значение ключа без пробела и + и правильное средство доступа к свойству в скобках.

Вы можете сделать еще несколько изменений, например, получить месяц непосредственно из Экземпляр и вернуть непосредственно значение требуемого свойства.

const
    fishData = [{ fish_name: "Barreleye", price: "15,000", location: "Sea", shadow_size: "Small", n_March: true, n_3: true }, { fish_name: "Coelacanth", price: "15,000", location: "Sea (Rainy Days)", shadow_size: "Largest", n_3: true }],
    fishMonth = `n_${(new Date).getMonth()}`,
    filteredFish = fishData.filter(fish => fish[fishMonth]);

console.log(filteredFish);

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

const
    fishData = [{ fish_name: "Barreleye", price: "15,000", location: "Sea", shadow_size: "Small", n_March: true, month: 3 }, { fish_name: "Coelacanth", price: "15,000", location: "Sea (Rainy Days)", shadow_size: "Largest", month: 3 }],
    fishMonth = (new Date).getMonth(),
    filteredFish = fishData.filter(({ month }) => month === fishMonth);

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