Javascript 通过迭代映射上的数组函数从数组中删除对象?

Javascript 通过迭代映射上的数组函数从数组中删除对象?,javascript,arrays,reactjs,object,Javascript,Arrays,Reactjs,Object,我有一个名为data的对象数组,还有一个名为mapping的单独对象 我尝试从数组中删除无效对象。我已经使用映射函数对数组进行了迭代。我使用映射对象检查对象是否有效。如果发现无效,则应将其从数组中删除,但map函数不是异步工作的,因此它们跳过无效对象,该对象被推入数组中,这是不正确的。因此,请提出一些解决方案,并给我一个小细节,为什么地图功能跳过对象 这是我的代码: const data = [ { id: 11, name: "

我有一个名为
data
的对象数组,还有一个名为
mapping
的单独对象

我尝试从数组中删除无效对象。我已经使用
映射
函数
对数组进行了迭代。我使用
映射
对象检查对象是否有效。如果发现无效,则应将其从数组中删除,但map函数不是异步工作的,因此它们跳过无效对象,该对象被推入数组中,这是不正确的。因此,请提出一些解决方案,并给我一个小细节,为什么地图功能跳过对象

这是我的代码:

 const data = [
        {
          id: 11,
          name: "dashboard",
        },

        {
          id: 13,
          name: "card",
        },

        {
          id: 1,
          name: "user",
        },

        {
          id: 4,
          name: "test",
        },
      ];

      const mapping = {
        1: "dashboard",
        2: "user",
        3: "card",
        4: "test",
      };

      const filterData = () => {
        data.map((parent, i) => {
          if (Object.keys(mapping).includes(parent.id.toString())) {
          } else {
            const index = data.indexOf(parent);
            if (index > -1) {
              data.splice(index, 1);
            }
          }
        });
        console.log("updated data", data);
      };

    ```
wrong output
[
 { id: 13, name: "card" },
    { id: 1, name: "user" },
   { id: 4, name: "test" }
    ];



您可以使用
filter
从数组中删除无效(基于某些条件)对象,而无需修改原始数组

constfilterdata=(数据,映射)=>data.filter(item=>mapping[item.id])
//或
常量filterData=(数据,映射)=>data.filter(项=>mapping[item.id]!==未定义)
//或
常量filterData=(数据,映射)=>data.filter(项=>mapping[item.id]!==void 0)
演示:

constfilterdata=(数据,映射)=>data.filter(item=>mapping[item.id])
常数数据=[{
id:11,
名称:“仪表板”,
},
{
id:13,
姓名:“卡”,
},
{
id:1,
名称:“用户”,
},
{
id:4,
名称:“测试”,
},
];
常量映射={
1:“仪表板”,
2:“用户”,
3:“卡片”,
4:“测试”,
};

log(filterData(数据,映射))
您可以使用
filter
从数组中删除无效(基于某些条件)对象,而无需修改原始数组

constfilterdata=(数据,映射)=>data.filter(item=>mapping[item.id])
//或
常量filterData=(数据,映射)=>data.filter(项=>mapping[item.id]!==未定义)
//或
常量filterData=(数据,映射)=>data.filter(项=>mapping[item.id]!==void 0)
演示:

constfilterdata=(数据,映射)=>data.filter(item=>mapping[item.id])
常数数据=[{
id:11,
名称:“仪表板”,
},
{
id:13,
姓名:“卡”,
},
{
id:1,
名称:“用户”,
},
{
id:4,
名称:“测试”,
},
];
常量映射={
1:“仪表板”,
2:“用户”,
3:“卡片”,
4:“测试”,
};

console.log(filterData(data,mapping))
Ajeet Shah的解决方案是正确的,我会应用相同的想法,但是,我认为基于代码的解决方案也很重要,这样您就可以知道代码与正确代码之间的区别。然而,我建议接受Ajeet的回答

让我们看看下面的代码:

const数据=[
{
id:11,
名称:“仪表板”,
},
{
id:13,
姓名:“卡”,
},
{
id:1,
名称:“用户”,
},
{
id:4,
名称:“测试”,
},
];
常量映射={
1:“仪表板”,
2:“用户”,
3:“卡片”,
4:“测试”,
};
常量过滤器数据=[];
data.map((父,i)=>{
if(Object.keys(mapping.includes)(parent.id.toString()){
push(parent.id.toString());
}
});

console.log(filterData)Ajeet Shah的解决方案是正确的,我也会采用同样的想法,但是,我认为基于您的代码的解决方案也很重要,这样您就可以知道您的代码和正确的代码之间的区别。然而,我建议接受Ajeet的回答

让我们看看下面的代码:

const数据=[
{
id:11,
名称:“仪表板”,
},
{
id:13,
姓名:“卡”,
},
{
id:1,
名称:“用户”,
},
{
id:4,
名称:“测试”,
},
];
常量映射={
1:“仪表板”,
2:“用户”,
3:“卡片”,
4:“测试”,
};
常量过滤器数据=[];
data.map((父,i)=>{
if(Object.keys(mapping.includes)(parent.id.toString()){
push(parent.id.toString());
}
});

console.log(filterData)您期望的输出是什么?什么是“无效对象”?使用
map()
是错误的作业工具
filter()
会使这更简单这能回答你的问题吗?您期望的输出是什么?什么是“无效对象”?使用
map()
是错误的作业工具
filter()
会使这更简单这能回答你的问题吗?答案是正确的,我建议你的答案在我的答案中被接受,但是我需要写另一个答案来向提问者展示他的代码和工作示例之间的差异。答案是正确的,我建议你的答案在我的答案中被接受,但无论如何,我需要写另一个答案来向提问者展示他的代码和工作示例之间的差异。