亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用對象過濾對象數組

如何使用對象過濾對象數組

慕雪6442864 2022-12-22 15:59:55
我想通過另一個數組的項目過濾一個對象數組。這是我的物品清單:const list = ["first", "second", "third"]這個數組可以是空的,有一個,兩個或三個 itens...例如:const list = []const list = ["first"]let list = ["first", "third"]所以,我需要使用我的狀態list來過濾我myArr2的。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"      },      ]如果我list的是:const list = [ "first", "third" ]輸出必須是:const myArr2 = [  {    id: "1",    language: "portuguese",    status: "first"      },  {    id: "2",    language: "portuguese",    status: "first"      },  {    id: "4",    language: "portuguese",    status: "third"      },      ]如果我list的是:const list = [ "first" ]輸出必須是:const myArr2 = [  {    id: "1"    language: "portuguese"    status: "first"      },  {    id: "2"    language: "portuguese"    status: "first"      }  }等等...我制作了這段代碼但無法正常工作:Object.entries(list).forEach(status => {  myArr2.filter(item => {    if(item.status === status){      return item    }  })})我究竟做錯了什么?有人可以幫助我嗎?
查看完整描述

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() 您可以在此處閱讀更多信息。


查看完整回答
反對 回復 2022-12-22
?
繁花不似錦

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));


查看完整回答
反對 回復 2022-12-22
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

您可以解構status并檢查是否list包含此值。

result = myArr2.filter(({ status }) => list.includes(status));


查看完整回答
反對 回復 2022-12-22
  • 3 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號