#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)];
}