按类别组织项目

  • 本文关键字:项目 javascript
  • 更新时间 :
  • 英文 :


我必须编写一个函数organizeItems,它按类别组织项目。函数的参数是一个item对象数组。每个item对象有3个属性,category(字符串),itemName(字符串)和onSale(布尔值)。

var itemData = [
{ category: 'fruit', itemName: 'apple', onSale: false },
{ category: 'canned', itemName: 'beans', onSale: false },
{ category: 'canned', itemName: 'corn', onSale: true },
{ category: 'frozen', itemName: 'pizza', onSale: false },
{ category: 'fruit', itemName: 'melon', onSale: true },
{ category: 'canned', itemName: 'soup', onSale: false },
];

返回值应该是一个具有类别属性的对象。每个属性值都是属于该类别的项目数组,如果onSale设置为true,则应该在其项目名称后面附加'($)'。这是我要做的一个例子:

{
fruit:  ['apple', 'melon($)'],
canned: ['beans', 'corn($)', 'soup'],
frozen: ['pizza']
};

到目前为止,这是我所拥有的:

var codeObj = {};
for(var i = 0; i < itemData.length; i++){
for(key in itemData[i]){
codeObj[itemData[i].category] = Object.values([itemData[i].itemNames])

这是输出到控制台的内容:

{ fruit: [ undefined ], canned: [ undefined ], frozen: [ undefined ] }

大家好,我就是这样做的。

const obj = {};
itemData.map((item, index) => {
let objKeys = Object.keys(item);
objKeys.forEach((k) => {
if (k === "category") {
if (!obj[item[k]]) {
obj[item[k]] = [];
}
if (!obj[item[k]].find((i) => i === item.itemName)) {
obj[item[k]].push(
item.onSale ? `${item.itemName}($)` : item.itemName
);
}
}
});
});
console.log("obj", obj);

my way

const itemData = 
[ { category: 'fruit',  itemName: 'apple', onSale: false } 
, { category: 'canned', itemName: 'beans', onSale: false } 
, { category: 'canned', itemName: 'corn',  onSale: true  } 
, { category: 'frozen', itemName: 'pizza', onSale: false } 
, { category: 'fruit',  itemName: 'melon', onSale: true  } 
, { category: 'canned', itemName: 'soup',  onSale: false } 
] 
const result = itemData.reduce((r,{category,itemName,onSale})=>
{
r[category] = r[category] || []
r[category].push( itemName + (onSale?'($)':''))
return r
},{})

// show result
console.log( JSON.stringify(result)
.replace(`{"`,`nresult =n  { `)
.replace(/"],"/g,`' ]n  , `)
.replace(`"]}`,`' ]n  }`)
.replace(/":["/g,`: [ '`)
.replace(/","/g,`', '`))
.as-console-wrapper {max-height: 100%!important;top:0 }

此解决方案有效

function organizeItems(itemData) {
let obj = {}
for(i=0; i<itemData.length; i++) {

let item = itemData[i]
for(key in item) {
if(key === 'category') {
if(!obj[item[key]]) {
obj[item[key]] = []
}
if(obj[item[key]]) {
obj[item[key]].push(item.onSale ? `${item.itemName}($)` : `${item.itemName}`)
}
}

}
}
return obj

}

function organizeItems(items) { 
return items.reduce(function (acc, obj) {
for (var i = 0; i < items.length; i++) {
let itemCategory = obj.category
if (!acc[itemCategory]) {
acc[itemCategory]= []
}
acc[itemCategory].push(obj.onSale?`${obj.itemName}($)`:`${obj.itemName}`)
return acc
}
}, {})
}

function organizeItems(itemData) {
var result = {};
for (var i = 0; i < itemData.length; i++) {
var type = itemData[i].category;
var name = itemData[i].itemName;
if (itemData[i].onSale) {
name += "($)";
}
if (type in result) {
result[type].push(name);
} else {
result[type] = [name];
}
}
return result;
}

最新更新