js 求助该怎么删除这种类型的对象数组

woaibaoba
  • 170

image

这是返回的数据res.rows,现在我需要根据判断删除modulesG里的其中一个数组(对象),用name做判断,假设res.rows[i].modulesG[i].name == 'test'的话,就删除这个modulesG[i],其他不变,然后返回出删除出来后的数据。。

讲的可能有点绕,在这里先谢谢各位大哥大姐的解答了,感激不尽,如果讲的太绕了我也会耐心解释清楚的,麻烦你们了,谢谢!

以下是我自己写的代码,但是没有用,是错误的代码

    for (let i = 0; i < res.rows.length; i++) {

         for (let j = 0; j < res.rows[i].modulesG.length; j++) {

               if (res.rows[i].modulesG[j].name == 'test') {

                   res.rows[i].modulesG[j].splice(j, 1);

                 }

           }

    }
回复
阅读 1.8k
4 个回答
我是王双6
  • 101
✓ 已被采纳
function _filter(data) {
    return data.map(i => {
         const { modulesG = [] } = i
         const filterModuleG = modulesG.reduce((acc, cur) => {
             const isTarget = cur.every(j => j.name !== 'test')
             return isTarget ? [
                 ...acc,
                 cur
             ] : acc
         }, [])
         return {
             ...i,
             modulesG: filterModuleG
         }
    })
}

_filter(res.rows || [])
modulesG[j]好像还得循环
yzllee
  • 2.7k

三层循环, 你只写了两层


const filterNameList = ["test"];

for(let i=0;i++;i>res.rows.length){
    for(let j=0;j++;j>res.rows[i].modulesG.length){
        let newModulesG = res.rows[i].modulesG[j].filter(item => !filterNameList.includes(item.name));
        res.rows[i].modulesG = [...newModulesG];
    }
}

按你的需求,应该是下面代码的逻辑吧你的问题是 res.rows[i].modulesG.splice(j, 1); 写成了res.rows[i].modulesG[j].splice(j, 1);

    for (let i = 0; i < res.rows.length; i++) {

         for (let j = 0; j < res.rows[i].modulesG.length; j++) {

               if (res.rows[i].modulesG[j].name == 'test') {

                   res.rows[i].modulesG.splice(j, 1);

                 }

           }

    }
宣传栏