过滤对象并覆盖数组

时间:2019-10-13 13:37:28

标签: javascript

我需要删除未通过的整个对象

这是数组

const array = [{
    course: 1,
    list: [{
        id: 1,
        name: "john",
        code: true
      },
      {
        id: 1,
        name: "maria",
        code: true
      },
    ]
  },
  {
    course: 2,
    list: [{
        id: 3,
        name: "rose"
      },
      {
        id: 4,
        name: "mark",
        code: true
      }
    ]
  }
]

我需要的是删除没有代码的obj:true,并得到这个

const array = [{
    course: 1,
    list: [{
      id: 1,
      name: "john",
      code: true
    }, ]
  },
  {
    course: 2,
    list: [{
      id: 1,
      name: "mark",
      code: true
    }]
  }
]

我试图在过滤器中制作一张地图,但是根本不起作用

const remove = array.filter(function(lines) {
  return lines.map(line => line.list.map(list => list.code))
});

2 个答案:

答案 0 :(得分:1)

您可以映射整个数组,然后复制特定项目的所有属性,并分别对list属性进行过滤。

const array = [{
    course: 1,
    list: [{
        id: 1,
        name: "john",
        code: true
      },
      {
        id: 1,
        name: "maria",
        code: true
      },
    ]
  },
  {
    course: 2,
    list: [{
        id: 3,
        name: "rose"
      },
      {
        id: 4,
        name: "mark",
        code: true
      }
    ]
  }
]

const filter = arr => arr.map(arrItem => ({ 
     ...arrItem,
    list: arrItem.list.filter( listItem => listItem.code )
  })
)

console.log( filter(array) )

答案 1 :(得分:0)

const filtered = [];

arr.forEach(item => {
  const list = item.list.filter(listItem => listItem.code);

  if(list.length > 0) {
     filter.push({ ...item, list });
  }
});

仅当列表中包含任何用code: false过滤掉的项目后,此方法才将项目添加到过滤后的输出数组中。无论如何要包括它们,您可以这样做:

const filtered = arr.map(item => ({
  ...item,
  list: item.list.filter(listItem => listItem.code)
});