Есть ли функция loadash для сравнения двух массивов и возврата true, только если все значения из arr2 присутствуют в arr1? - PullRequest
0 голосов
/ 08 апреля 2019

Мне нужно сравнить два массива и вернуть true, если только массив 1 содержит все значения массива 2. Какова подходящая функция loadash для этого?

let arr1 = [1, 2, 3, 4]
let arr2 = [1, 2] 
let arr3 = [1, 5] 

сравнение arr1 с arr2 должно вернуть true сравнение arr1 с arr3 должно вернуть false

Ответы [ 6 ]

2 голосов
/ 08 апреля 2019

Просто для полноты можно взять Set и сравнить с Set#has.

let arr1 = [1, 2, 3, 4],
    arr2 = [1, 2],
    arr3 = [1, 5],
    base = new Set(arr1);

console.log(arr2.every(Set.prototype.has, base));
console.log(arr3.every(Set.prototype.has, base));
0 голосов
/ 08 апреля 2019

Вы можете использовать _.difference таким образом:

let arr1 = [1, 2, 3, 4]
let arr2 = [1, 2] 

const b = _.difference(arr2, arr1).length === 0
0 голосов
/ 08 апреля 2019

Вы можете использовать _.difference

let arr1 = [1, 2, 3, 4]
let arr2 = [1, 2] 
let arr3 = [1, 5] 


console.log(_.difference(arr2,arr1).length === 0)
console.log(_.difference(arr3,arr1).length === 0)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
0 голосов
/ 08 апреля 2019
let arr1 = [1, 2, 3, 4]
let arr2 = [1, 2] 

for(let x of arr2) {
    _.includes(arr1, x) || true;
}
0 голосов
/ 08 апреля 2019

Здесь нет необходимости в загрузке, просто используйте собственный метод JavaScript Array#every с Array#includes метод

function compareArray(arr1, arr2) {
  return arr2.every(v => arr1.includes(v))
}

let arr1 = [1, 2, 3, 4]
let arr2 = [1, 2]
let arr3 = [1, 5]

console.log(compareArray(arr1, arr2))
console.log(compareArray(arr1, arr3))
0 голосов
/ 08 апреля 2019

Вы можете просто использовать every:

let arr1 = [1, 2, 3, 4];
let arr2 = [1, 2];
let arr3 = [1, 5];

const allElements = (a1, a2) => a2.every(e => a1.includes(e));
console.log(allElements(arr1, arr2));
console.log(allElements(arr1, arr3));
...