Asked Jul 3rd, 2019 3:29 a.m. 229 0 4
  • 229 0 4
0

Kiểm tra tất cả giá trị trong arr1 có tồn tại trong arr2 hay không

Share
  • 229 0 4

Mình gặp vấn đề với việc kiểm tra 2 mảng, cụ thể như sau. mình có mảng 1:

arr1= [
    {
        id: 1,
        name: "aa"
    },
    {
        id: 2,
        name: "bb"
    },
    {
        id: 3,
        name: "cc"
    }
];

và mảng 2:

ar2 = [1,3];

Mình muốn kiểm tra xem liệu trong arr2 có tồn tại tất cả id của các object trong arr1 hay không. Mong mọi người giúp đỡ

4 ANSWERS


Answered Jul 3rd, 2019 3:41 a.m.
+2

bạn thử như này xem

arr1.every(e => arr2.includes(e.id))
Share
Jul 3rd, 2019 3:43 a.m.

@lathanh1108 Nếu chỉ cần kiểm tra có hay không thì bạn dùng cách này là ngắn gọn nhất.

0
| Reply
Share
Avatar Tran Dai Son @tran.dai.son
Jul 3rd, 2019 8:02 a.m.

IE không support hàm includes.

arr1.every(e => arr2.indexOf(e.id) > -1)
+1
| Reply
Share
Jul 10th, 2019 8:24 a.m.

@tran.dai.son Nếu dùng mấy function của lodash cung cấp thì nó support tới IE11, chủ thớt có thể dùng qua lodash mà.

0
| Reply
Share
Avatar Tran Dai Son @tran.dai.son
Jul 12th, 2019 2:07 a.m.

@huukimit Thì đúng là như a nói, nhưng tội gì có cái hàm mặc định và cũng thông dụng, hỗ trợ all browsers nhưng không dùng mà phải đi import một file khác từ thư viện vào cho nặng thêm, có hơi lạm dụng thư viện ko 😂

0
| Reply
Share
Answered Jul 3rd, 2019 3:55 a.m.
+2
arr1= [
    {
        id: 1,
        name: "aa"
    },
    {
        id: 2,
        name: "bb"
    },
    {
        id: 3,
        name: "cc"
    }
];
var ar2 = [1,3];
var newArr1 = _.map(arr1, i=> i.id);
result = _.difference(ar2, newArr1).length === 0
console.log(result) // true
Share
Answered Jul 3rd, 2019 3:40 a.m.
+1

Mình thấy có nhiều cách lắm. Chắc là bạn chỉ cần duyệt một mảng và tìm kiếm đối chiếu ở mảng còn lại. VD một cách đơn giản như này:

const results = arr1.filter(item => arr2.includes(item.id))

if (results.length) {
  // Found them
} else {
  // Not found
}
Share
Answered Jul 5th, 2019 4:53 a.m.
0

var arr2 = [1, 2, 3]; _.filter(arr2, value => _.keyBy(arr1, "id")[value]).length === arr1.length // true

var arr2 = [1, 3]; _.filter(arr2, value => _.keyBy(arr1, "id")[value]).length === arr1.length // false

Lodash nhé bạn đã check kết quả. https://lodash.com/docs/ vào trang này paste code test thử nhé

Share
Viblo
Let's register a Viblo Account to get more interesting posts.