Javascript 使用.map方法更新I';我在评估

Javascript 使用.map方法更新I';我在评估,javascript,Javascript,我正在数组selectedItem上执行map方法,其中selectedItem具有字符串属性nodeType和对象属性items: items={计算机:0,驱动器:0,文件:0,文件夹:0} selectedItem?.map(item => { switch (item.nodeType) { case 'FileType': return (items.files += 1); case 'FolderType': return (ite

我正在数组
selectedItem
上执行map方法,其中
selectedItem
具有字符串属性
nodeType
和对象属性
items

items={计算机:0,驱动器:0,文件:0,文件夹:0}

selectedItem?.map(item => {
  switch (item.nodeType) {
    case 'FileType':
      return (items.files += 1);
    case 'FolderType':
      return (items.folders += 1);
    case 'DriveType':
      return (items.drives += 1);
    case 'ComputerType':
      return (items.computers += 1);
    default:
      return;
  }
我知道我应该能够使用map方法的内置功能(
hasOwnProperty
)来替换switch语句,但我只看到过使用对象文本匹配以返回字符串的示例,如下所示:

const itemTypes = {
        file: 'file',
        folder: 'folder',
        drive: 'drive',
        computer: 'computer'
    }
但是,在
.map(expression)
匹配时,我希望对我正在计算的对象中的属性执行一个简单的递增逻辑,使其
+=1

我已经研究了
.filter()
.reduce()
但当然不适用,因为它们返回不同的数组。我确信它可能需要在
.map(expression)
中编写正确的函数,但不确定如何做到这一点

我已经看过这些如此之多的帖子,但它们要么不适用,要么不能让我一路到达那里。第二个链接非常接近我要查找的内容,但不确定如何将其应用于我的代码:


如何仅使用映射而不在映射函数中嵌套开关?

您可以使用映射对象将节点类型与其项键相关联

const itemsKeyByNodeType = {
  FileType: 'files',
  FolderType: 'folders',
  DriveType: 'drives',
  ComputerType: 'computers'
};

selectedItem?.forEach(item => {
  if (itemsKeyByNodeType[item.nodeType]) {
    items[itemsKeyByNodeType[item.nodeType]]++;
  }
});
map()用于创建新数组。当您想要更新对象时,它没有用处

您应该使用reduce来计算所有类型

const selectedItem=[
{nodeType:'FolderType'},
{nodeType:'DriveType'},
{nodeType:'DriveType'},
{nodeType:'FolderType'},
{nodeType:'ComputerType'},
];
常量类型={
文件类型:“文件”,
FolderType:'文件夹',
驱动器类型:“驱动器”,
计算机类型:“计算机”
};
常数项={
电脑:0,
驱动器:0,
档案:0,
文件夹:0
};
选择editem?.reduce((对象,项目)=>{
const type=types[item.nodeType];
if(type)obj[type]++;
返回obj;
},项目);

控制台日志(项目)如果要更新元素,则不会使用map
map()
用于将一个事物数组转换为一个其他事物数组。这不是您的用例。如果您想改变数组中的项,而不是创建新数组,请使用
forEach
(或
for
循环的经典
)。map()毫无意义。。。。reduce将尝试使用reduce,它将具有JSON对象
items
的初始值,并在一天结束时返回更新的
items
对象。Reduce基本上会在同一对象上累积结果。