Kiểm tra tất cả giá trị trong arr1 có tồn tại trong arr2 hay không
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
@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.
IE không support hàm includes
.
arr1.every(e => arr2.indexOf(e.id) > -1)
@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à.
@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
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
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
}
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é