Yêu cầu thg 7 3, 2019 3:29 SA 234 0 4
  • 234 0 4
0

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

Chia sẻ
  • 234 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 CÂU TRẢ LỜI


Đã trả lời thg 7 3, 2019 3:41 SA
+2

bạn thử như này xem

arr1.every(e => arr2.includes(e.id))
Chia sẻ
thg 7 3, 2019 3:43 SA

@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.

Avatar Tran Dai Son @tran.dai.son
thg 7 3, 2019 8:02 SA

IE không support hàm includes.

arr1.every(e => arr2.indexOf(e.id) > -1)
thg 7 10, 2019 8:24 SA

@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à.

Avatar Tran Dai Son @tran.dai.son
thg 7 12, 2019 2:07 SA

@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 😂

Đã trả lời thg 7 3, 2019 3:55 SA
+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
Chia sẻ
Đã trả lời thg 7 3, 2019 3:40 SA
+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
}
Chia sẻ
Đã trả lời thg 7 5, 2019 4:53 SA
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é

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí