[英]How to remove items in deep array of objects?
假設我有以下對象數組:
[
{ id: "1", categories: [ { category_id: "1"}, { category_id: "2"} ],
{ id: "2", categories: [ { category_id: "2"}, { category_id: "3"} ],
{ id: "3", categories: [ { category_id: "1"}, { category_id: "5"} ],
]
我要刪除所有沒有作為category_id
的項目,這些項目不包括在此引用數組中: 1, 4, 5
。
因此,預期的輸出應為: 1, 3
,因為id 2在reference數組中沒有任何類別id。
我寫了這段代碼:
items.filter(obj => !references.includes(obj.categories.category_id));
但這將返回相同的項目
預期結果:
[
{ id: "1", categories: [ { category_id: "1"}, { category_id: "2"} ],
{ id: "3", categories: [ { category_id: "1"}, { category_id: "5"} ],
]
您可以使用Array#filter
, Array#some
和帶有Array#includes
的值。
var array = [{ id: "1", categories: [{ category_id: "1" }, { category_id: "2" }] }, { id: "2", categories: [{ category_id: "2" }, { category_id: "3" }] }, { id: "3", categories: [{ category_id: "1" }, { category_id: "5" }] }], keep = ["1", "4", "5"], result = array.filter(({ categories }) => categories.some(({ category_id }) => keep.includes(category_id))); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
obj.categories
是一個數組,您必須以某種方式對其進行迭代:
items.filter(obj => obj.categories.every(category => !references.includes(category.category_id)));
在這里,您還有另一種使用Array :: findIndex()的方法
const input = [ {id: "1", categories: [{category_id: "1"}, {category_id: "2"}]}, {id: "2", categories: [{category_id: "2"}, {category_id: "3"}]}, {id: "3", categories: [{category_id: "1"}, {category_id: "5"}]}, ]; const references = [1, 4, 5]; let res = input.filter( y => y.categories.findIndex(x => references.includes(Number(x.category_id))) >= 0 ); console.log(res);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.