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));
添加回答
舉報