Горячие категории / проверка запасов

#javascript #arrays #function

Вопрос:

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

 const items = [
        { id: 'tltry001', name: 'soap', stocks: 14, category: 'toiletries' },
        { id: 'tltry002', name: 'shampoo', stocks: 8, category: 'toiletries' },
        { id: 'tltry003', name: 'tissues', stocks: 0, category: 'toiletries' },
        { id: 'gdgt001', name: 'phone', stocks: 0, category: 'gadgets' },
        { id: 'gdgt002', name: 'monitor', stocks: 0, category: 'gadgets' }
    ];
 

Вот мой код до сих пор. Я получаю только одну категорию и не могу отобразить 2-ю категорию с 0 акциями.

 function findHotCategories(items) {
    
     let ilen = items.length
     for(let i = 0; i < ilen; i  ){
       if(items[i].stocks === 0){
         let newArr = items[i].category
            return [newArr]
       }
    }
  };
 

Комментарии:

1. Что return делает а? Это ответ на ваш вопрос?

2. Извини, я не понимаю.

Ответ №1:

 // dont forget to UpVoted (:

const items = [
        { id: 'tltry001', name: 'soap', stocks: 14, category: 'toiletries' },
        { id: 'tltry002', name: 'shampoo', stocks: 8, category: 'toiletries' },
        { id: 'tltry003', name: 'tissues', stocks: 0, category: 'toiletries' },
        { id: 'gdgt001', name: 'phone', stocks: 0, category: 'gadgets' },
        { id: 'gdgt002', name: 'monitor', stocks: 0, category: 'gadgets' }
    ];

const emptyStocks = [];
for( let a in items ){ if( items[a].stocks < 1 ) emptyStocks.push(items[a]); }
console.log( emptyStocks ); 

Ответ №2:

Вы return находитесь в цикле, поэтому функция заканчивается там, где она соответствует первому элементу.

Вы должны вернуться после цикла

 const items = [
        { id: 'tltry001', name: 'soap', stocks: 14, category: 'toiletries' },
        { id: 'tltry002', name: 'shampoo', stocks: 8, category: 'toiletries' },
        { id: 'tltry003', name: 'tissues', stocks: 0, category: 'toiletries' },
        { id: 'gdgt001', name: 'phone', stocks: 0, category: 'gadgets' },
        { id: 'gdgt002', name: 'monitor', stocks: 0, category: 'gadgets' }
    ];

function findHotCategories(items) {
  let newArr = [];    
     let ilen = items.length
     for(let i = 0; i < ilen; i  ){
       if(items[i].stocks === 0){
         newArr.push(items[i].category)
       }
    }
    return [...new Set(newArr)];
  }
  
console.log(findHotCategories(items)); 

Комментарии:

1. Спасибо. Но это дает повторяющиеся категории.

2. Извините, я упустил из виду вашу цель. Обновленный.

Ответ №3:

Вот он:

 const items = [
        { id: 'tltry001', name: 'soap', stocks: 14, category: 'toiletries' },
        { id: 'tltry002', name: 'shampoo', stocks: 8, category: 'toiletries' },
        { id: 'tltry003', name: 'tissues', stocks: 0, category: 'toiletries' },
        { id: 'gdgt001', name: 'phone', stocks: 0, category: 'gadgets' },
        { id: 'gdgt002', name: 'monitor', stocks: 0, category: 'gadgets' }
    ];

const totalStocks = items.reduce((acc, prev) => {
    if (!acc[prev.category]) {
        return { ...acc, [prev.category]: prev.stocks }
    }
    return { ...acc, [prev.category]: acc[prev.category]   prev.stocks }
}, {})

const emptyStocks = Object.keys(totalStocks).filter(key => totalStocks[key] === 0)

console.log(emptyStocks) 

Ответ №4:

Мой короткий ответ с использованием filter и map функцией.

 function findHotCategories(items) {
  const result = items.filter(e => e.stocks === 0).map(e => e.category);
  return [...new Set(result)];
}