3 回答

TA贡献1757条经验 获得超8个赞
您正在以我将要说的相反方式进行操作。您需要检查 myArr2 中的每个项目是否具有列表数组中存在的状态。你可以这样做 -
正确的代码 -
let myArr2 = [
{
id: "1",
language: "portuguese",
status: "first"
},
{
id: "2",
language: "portuguese",
status: "first"
},
{
id: "3",
language: "portuguese",
status: "second"
},
{
id: "4",
language: "portuguese",
status: "third"
},
{
id: "5",
language: "portuguese",
status: "second"
},
];
const list = [ "first", "third" ]
myArr2 = myArr2.filter(item => list.includes(item.status))
console.log(myArr2)
你的方法有误
Object.entries(list).forEach(status => {
myArr2.filter(item => {
if(item.status === status){
return item
}
})
})
在上述方法中,您将遍历列表中的第一个元素(即first)。因此,它将过滤掉所有myArr2状态不为第一的项目。
在下一次迭代中,您将检查列表中的第二个元素(即second)。所以,现在它会进一步过滤掉所有myArr2状态不为的项目second。由于没有元素同时具有 first 和 second 的状态,因此您的代码可能会将结果数组作为空数组返回。
注意:您需要将返回的新数组分配myArr2给某个变量。该filter方法不会就地过滤掉元素。因此,由于您还没有这样做,如果您尝试通过控制台日志记录来检查它,您的代码可能会为您提供原始数组本身。
filter() 您可以在此处阅读更多信息。

TA贡献1851条经验 获得超4个赞
你可以过滤数组。如果元素是您的过滤器列表的一部分(indexOf != -1),请检查此项。
function filterArray(arr, list) {
return arr.filter(el => {
return list.indexOf(el.status)!=-1;
});
}
const myArr2 = [
{
id: "1",
language: "portuguese",
status: "first"
},
{
id: "2",
language: "portuguese",
status: "first"
},
{
id: "3",
language: "portuguese",
status: "second"
},
{
id: "4",
language: "portuguese",
status: "third"
},
{
id: "5",
language: "portuguese",
status: "second"
},
]
list1 = []
list2 = ["first"]
list3 = ["first", "third"]
console.log(filterArray(myArr2, list3));
console.log(filterArray(myArr2, list2));
console.log(filterArray(myArr2, list1));

TA贡献1852条经验 获得超7个赞
您可以解构status
并检查是否list
包含此值。
result = myArr2.filter(({ status }) => list.includes(status));
添加回答
举报