Мне нужно сравнить два массива и вернуть true, если только массив 1 содержит все значения массива 2. Какая функция loadash подходит для этого?
let arr1 = [1, 2, 3, 4]
let arr2 = [1, 2]
let arr3 = [1, 5]
сравнение arr1 с arr2 должно возвращать true сравнение arr1 с arr3 должно возвращать false
arr2.every(i => arr1.includes(i));
... ? Есть ли какая-то причина для использования lodash здесь?
Возможный дубликат Проверить, является ли массив подмножеством другого массива и Проверить, содержит ли массив все элементы другого массива
Поскольку вы выбрали ответ, не относящийся к lodash, упоминание «lodash» в заголовке и тегах теперь кажется неуместным и вводящим в заблуждение.
Извините, я нашел решение в разделе комментариев, но прямого ответа не было! Что мне теперь делать?
Вы можете просто использовать 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.info(allElements(arr1, arr2));
console.info(allElements(arr1, arr3));
Здесь нет необходимости в loadash, просто используйте собственный метод 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.info(compareArray(arr1, arr2))
console.info(compareArray(arr1, arr3))
let arr1 = [1, 2, 3, 4]
let arr2 = [1, 2]
for(let x of arr2) {
_.includes(arr1, x) || true;
}
Вы можете использовать _.difference
let arr1 = [1, 2, 3, 4]
let arr2 = [1, 2]
let arr3 = [1, 5]
console.info(_.difference(arr2,arr1).length === 0)
console.info(_.difference(arr3,arr1).length === 0)
<script src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
@briosheje Вы правы. Я неправильно понял. я не обновлял ответ
Чем ваш ответ отличается от моего?
Просто для полноты вы можете взять Set
и сравнить с Set#has
.
let arr1 = [1, 2, 3, 4],
arr2 = [1, 2],
arr3 = [1, 5],
base = new Set(arr1);
console.info(arr2.every(Set.prototype.has, base));
console.info(arr3.every(Set.prototype.has, base));
Для большей полноты у lodash также есть прототип every
, поэтому, чтобы «полностью» ответить на вопрос, хотя и не относящийся к делу, вы можете использовать _.every
.
@briosheje, зачем мне использовать функцию фреймворка, если у меня есть функция, встроенная в язык?
Я согласен с вами, и я бы тоже не стал его использовать, однако вопрос Есть ли функция loadash для сравнения двух массивов и возврата true, только если все значения из arr2 присутствуют в arr1?, поэтому стоит упомянуть, что у lodash также есть этот прототип, хотя лично я бы использовал его никогда.
Почему бы не использовать чистый js?