Hướng dẫn javascript filter array by another array of objects - mảng lọc javascript theo một mảng đối tượng khác

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ướng dẫn javascript filter array by another array of objects - mảng lọc javascript theo một mảng đối tượng khác

Đã hỏi ngày 23 tháng 6 năm 2015 lúc 14:19Jun 23, 2015 at 14:19

Hướng dẫn javascript filter array by another array of objects - mảng lọc javascript theo một mảng đối tượng khác

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

Hướng dẫn javascript filter array by another array of objects - mảng lọc javascript theo một mảng đối tượng khác

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

Hướng dẫn javascript filter array by another array of objects - mảng lọc javascript theo một mảng đối tượng khác

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"
}]
0

Vì vậy, bạn có thể sử dụng

myFilter = [
{
    userid: "101", 
    projectid: "11"
},
{
    userid: "102", 
    projectid: "12"
},
{
    userid: "103", 
    projectid: "11"
}]
1

Sẽ trở lại

myFilter = [
{
    userid: "101", 
    projectid: "11"
},
{
    userid: "102", 
    projectid: "12"
},
{
    userid: "103", 
    projectid: "11"
}]
2

Wich 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"
}]
5

5331 Huy hiệu vàng3 Huy hiệu bạc13 Huy hiệu đồngJun 25, 2021 at 17:01

Hướng dẫn javascript filter array by another array of objects - mảng lọc javascript theo một mảng đối tượng khác

myFilter = [
{
    userid: "101", 
    projectid: "11"
},
{
    userid: "102", 
    projectid: "12"
},
{
    userid: "103", 
    projectid: "11"
}]
6

Hướng dẫn javascript filter array by another array of objects - mảng lọc javascript theo một mảng đối tượng khác

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

Hướng dẫn javascript filter array by another array of objects - mảng lọc javascript theo một mảng đối tượng khác

Làm thế nào để bạn lọc một mảng các đối tượng với một mảng đối tượng khác?

Bạn có thể sử dụng Array.Prototype.Filter Like: Function Filter (ARR, IDS, Giới tính) {// lấy một mảng người ARR, một loạt ID chỉ mục và giới tính và trả về các đối tượng người phù hợp từ ARR Return Arr.Array. prototype. filter like: function filter(arr, ids, gender) { // takes an array of people arr, an array of indexes ids, and a gender and return the matched people objects from arr return arr.

Làm thế nào để bạn lọc một mảng các đối tượng trong một mảng các đối tượng trong JavaScript?

Người ta có thể sử dụng hàm Filter () trong JavaScript để lọc mảng đối tượng dựa trên các thuộc tính.Hàm bộ lọc () sẽ trả về một mảng mới chứa tất cả các phần tử mảng vượt qua điều kiện đã cho.Nếu không có phần tử nào vượt qua điều kiện, nó sẽ trả về một mảng trống.use filter() function in JavaScript to filter the object array based on attributes. The filter() function will return a new array containing all the array elements that pass the given condition. If no elements pass the condition it returns an empty array.

Làm cách nào để lọc một mảng từ một mảng khác?

const Arr1 = [4, 23, 7, 6, 3, 6, 4, 3, 56, 4];const Arr2 = [4, 56, 23];Chúng tôi được yêu cầu viết một hàm JavaScript có trong hai mảng này và lọc đầu tiên chỉ chứa những phần tử không có trong mảng thứ hai. Và sau đó trả về mảng được lọc.write a JavaScript function that takes in these two arrays and filters the first to contain only those elements that are not present in the second array. And then return the filtered array.

Làm cách nào để lọc hai mảng các đối tượng?

Để có được sự khác biệt giữa hai mảng của các đối tượng:..
Sử dụng phương thức Filter () để lặp qua mảng đầu tiên ..
Kiểm tra xem mỗi đối tượng không được chứa trong mảng thứ hai ..
Lặp lại các bước 1 và 2 cho mảng thứ hai ..
Concatenate kết quả để có được sự khác biệt hoàn toàn ..