59
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Câu hỏi này tương tự như một mảng bộ lọc jQuery của đối tượng với vòng lặp nhưng lần này tôi cần thực hiện bộ lọc với một mảng các đối tượng.
Exemple:
Tôi có một loạt các đối tượng như thế này:
myArray = [ { userid: "100", projectid: "10", rowid: "0" }, { userid: "101", projectid: "11", rowid: "1"}, { userid: "102", projectid: "12", rowid: "2"}, { userid: "103", projectid: "13", rowid: "3" }, { userid: "101", projectid: "10", rowid: "4" } ...]Tôi muốn lọc nó bằng một mảng như thế này:
myFilter = [ { userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }]và trả về cái này (userid và projectId trong myfilter cần phải khớp với userid và projectId trong myArray):
myArrayFiltered = [ { userid: "101", projectid: "11", rowid: "1" }, { userid: "102", projectid: "12", rowid: "2" }]Làm thế nào tôi có thể làm điều đó ?
Đã hỏi ngày 23 tháng 6 năm 2015 lúc 14:19Jun 23, 2015 at 14:19
Bạn có thể đặt một vài phương thức mảng để sử dụng ở đây - myFilter = [ { userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }] 7 và myFilter = [ { userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }] 8. Chúng có sẵn trong tất cả các trình duyệt gần đây và có các polyfills có sẵn cho các trình duyệt cũ hơn.
const myArray = [{ userid: "100", projectid: "10", rowid: "0" }, { userid: "101", projectid: "11", rowid: "1"}, { userid: "102", projectid: "12", rowid: "2" }, { userid: "103", projectid: "13", rowid: "3" }, { userid: "101", projectid: "10", rowid: "4" }]; const myFilter = [{ userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11"}]; const myArrayFiltered = myArray.filter((el) => { return myFilter.some((f) => { return f.userid === el.userid && f.projectid === el.projectid; }); }); console.log(myArrayFiltered);
Đã trả lời ngày 23 tháng 6 năm 2015 lúc 14:34Jun 23, 2015 at 14:34
AndyandyAndy
57.1K12 Huy hiệu vàng64 Huy hiệu bạc91 Huy hiệu Đồng12 gold badges64 silver badges91 bronze badges
3
Để đáp lại câu trả lời của Andy ở trên, mà tôi tin rằng nên được đánh dấu bây giờ là câu trả lời., Nếu bạn đang tìm kiếm hành vi ngược lại chính xác, hãy sử dụng mọi thứ với sự phủ định, một cái gì đó như thế này.
const result = masterData.filter(ad => filterData.every(fd => fd.userid !== md.userid));myFilter = [ { userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }] 9 chứa myArrayFiltered = [ { userid: "101", projectid: "11", rowid: "1" }, { userid: "102", projectid: "12", rowid: "2" }] 0 myArrayFiltered = [ { userid: "101", projectid: "11", rowid: "1" }, { userid: "102", projectid: "12", rowid: "2" }] 1.
Đã trả lời ngày 16 tháng 10 năm 2020 lúc 19:14Oct 16, 2020 at 19:14
TrigunatrigunaTriguna
3944 Huy hiệu bạc12 Huy hiệu đồng4 silver badges12 bronze badges
Với kịch bản ECMA 6.
const myArrayFiltered = myArray.filter( el => { return myfilter.some( f => { return f.userid === el.userid && f.projectid === el.projectid; }); });Function:
const filterObjectArray = (arr, filterArr) => ( arr.filter( el => filterArr.some( f => f.userid === el.userid && f.projectid === el.projectid ) ) ); console.log(filterObjectArray(myArray, myFilter))Liên kết đến ví dụ
Đã trả lời ngày 17 tháng 10 năm 2017 lúc 21:32Oct 17, 2017 at 21:32
TabarestabaresTabares
3,8515 huy hiệu vàng38 Huy hiệu bạc44 Huy hiệu đồng5 gold badges38 silver badges44 bronze badges
var filtered = []; for(var arr in myArray){ for(var filter in myFilter){ if(myArray[arr].userid == myFilter[filter].userid && myArray[arr].projectid == myFilter[filter].projectid){ filtered.push(myArray[arr].userid); } } } console.log(filtered);
Đã trả lời ngày 23 tháng 6 năm 2015 lúc 14:36Jun 23, 2015 at 14:36
Renato Galvonesrenato GalvonesRenato Galvones
5331 Huy hiệu vàng3 Huy hiệu bạc13 Huy hiệu đồng1 gold badge3 silver badges13 bronze badges
Dựa trên @renato câu trả lời của anh ấy, nhưng ngắn hơn:
const myArray = [{ userid: "100", projectid: "10", rowid: "0" }, ...]; const myFilter = [{ userid: "101", projectid: "11" }, ...]; const myArrayFiltered = myArray.filter(array => myFilter.some(filter => filter.userid === array.userid && filter.projectid === array.projectid));Đã trả lời ngày 18 tháng 12 năm 2019 lúc 10:16Dec 18, 2019 at 10:16
RubenrubenRuben
8.84313 Huy hiệu vàng60 Huy hiệu bạc100 Huy hiệu Đồng13 gold badges60 silver badges100 bronze badges
0
Bạn cần lặp qua mảng đầu tiên của mình và bên trong vòng lặp này, lại lặp lại bên trong bộ lọc.
Nếu UserID và ProjectID bằng nhau, bạn có thể thêm hàng vào mảng đã lọc của mình:
myArray = [{ userid: "100", projectid: "10", rowid: "0" }, { userid: "101", projectid: "11", rowid: "1" }, { userid: "102", projectid: "12", rowid: "2" }, { userid: "103", projectid: "13", rowid: "3" }, { userid: "101", projectid: "10", rowid: "4" }]; myFilter = [{ userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }]; function filterArray(array, filter) { var myArrayFiltered = []; for (var i = 0; i < array.length; i++) { for (var j = 0; j < filter.length; j++) { if (array[i].userid === filter[j].userid && array[i].projectid === filter[j].projectid) { myArrayFiltered.push(array[i]); } } } return myArrayFiltered; } myArrayFiltered = filterArray(myArray, myFilter); console.log(myArrayFiltered);JSfiddle
Đã trả lời ngày 23 tháng 6 năm 2015 lúc 14:35Jun 23, 2015 at 14:35
Magicprog.frMagicprog.frMagicprog.fr
4.0124 Huy hiệu vàng28 Huy hiệu bạc35 Huy hiệu Đồng4 gold badges28 silver badges35 bronze badges
Mã này sẽ phù hợp với không chỉ bởi userid và projectID mà còn với tất cả các thuộc tính của myfilter [j].
myFilter = [ { userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }] 0Vì vậy, bạn có thể sử dụng
myFilter = [ { userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }] 1Sẽ trở lại
myFilter = [ { userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }] 2Wich có nghĩa là tất cả các yếu tố với
myFilter = [ { userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }] 3Đã trả lời ngày 23 tháng 6 năm 2015 lúc 14:36Jun 23, 2015 at 14:36
Renato Galvonesrenato GalvonesVladimir
5331 Huy hiệu vàng3 Huy hiệu bạc13 Huy hiệu đồng1 silver badge8 bronze badges
0
Dựa trên @renato câu trả lời của anh ấy, nhưng ngắn hơn:
myFilter = [ { userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }] 4Đã trả lời ngày 18 tháng 12 năm 2019 lúc 10:16Jun 23, 2015 at 14:59
Rubenrubenbenny
8.84313 Huy hiệu vàng60 Huy hiệu bạc100 Huy hiệu Đồng1 silver badge7 bronze badges
Bạn cần lặp qua mảng đầu tiên của mình và bên trong vòng lặp này, lại lặp lại bên trong bộ lọc.
Đã trả lời ngày 23 tháng 6 năm 2015 lúc 14:36Jun 23, 2015 at 14:36
Renato Galvonesrenato Galvones
myFilter = [ { userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }] 55331 Huy hiệu vàng3 Huy hiệu bạc13 Huy hiệu đồngJun 25, 2021 at 17:01
myFilter = [ { userid: "101", projectid: "11" }, { userid: "102", projectid: "12" }, { userid: "103", projectid: "11" }] 6
Dựa trên @renato câu trả lời của anh ấy, nhưng ngắn hơn:May 12, 2021 at 7:47