#javascript #arrays #object #foreach #verification
#javascript #массивы #объект #foreach #проверка
Вопрос:
У меня есть 2 массива объектов;
// First one :
[0: {id: 1},
1: {id: 2},
2: {id: 3},
3: {id: 4}]
// Second one :
[0: {id: 10},
1: {id: 1},
2: {id: 4},
3: {id: 76},
4: {id: 2},
5: {id: 47},
6: {id: 3}]
Я хотел бы проверить, имеет ли второй по крайней мере те же идентификаторы, что и первый. Что было бы верно в этом случае, потому что второй содержит 1, 2, 3 и 4 идентификатора.
Я пытался использовать some() и every(), но это не работает должным образом
Моя попытка :
let res = this.trainingEpisodesList.some( episode => {
this.completedEpisodes.every( userEpisode => {
userEpisode.id == episode.id;
})
});
Спасибо 😉
Комментарии:
1. но это не работает должным образом , это не описание ошибки. Чего вы ожидаете и каков результат вашего кода?
2. Отсутствие возврата чего-либо внутри вызова
some
orevery
является одной из причин, почему ваша попытка не будет делать то, что вы хотите. Я бы также получил лучшую среду IDE / linter (или настроил их должным образом), утверждение типаuserEpisode.id == episode.id;
должно быть автоматически помечено как «вероятно, ошибка».
Ответ №1:
ES7,
let result = one.map(a => a.id);
let result2 = two.map(a => a.id);
const final_result = result.every(val => result2.includes(val));
ES5,
var result = one.map(a => a.id);
var result2 = two.map(a => a.id);
var final_result = result.every(function(val) {
return result2.indexOf(val) >= 0;
});
Ответ №2:
Вы можете сделать это с помощью every
и find
:
let completedEpisodes =
[
{id: 1},
{id: 2},
{id: 3},
{id: 4}
]
let trainingEpisodesList =
[
{id: 10},
{id: 1},
{id: 4},
{id: 76},
{id: 2},
{id: 47},
{id: 3}
]
let containsAllCompleted = trainingEpisodesList.every(c => completedEpisodes.find(e=>e.id==c.id));
console.log(containsAllCompleted);
Комментарии:
1. Нет, это не работает, он просто возвращает false, поскольку он должен возвращать true. Я хотел бы иметь значение TRUE, если completedEpisodes содержит идентификаторы каждого обучающего списка
2. @LuDo если приведенный выше пример подходит для вас, то обращение массивов в операции должно исправить это. Я обновил ответ. Теперь в ответе проверяется, завершены ли все обучающие эпизоды
3. Большое тебе спасибо, чувак, не мог бы ты немного объяснить, что делает эта комбинация методов, пожалуйста? Я прочитал документацию, но это все еще не так ясно:(
4. Конечно. Итак, цель вопроса состояла в том, чтобы проверить, все ли элементы в
trainingEpisodesList
находятся вcompletedEpisodes
заданномid
качестве идентификатора. Используются две функции:every
которая проверяет, соответствуют ли все элементы массива определенному условию, иfind
которая проверяет, есть ли в массиве элемент с определеннымid
. Итак, что мы должны сделать, это проверить, соответствует лиevery
элемент в списке эпизодов обучения нашему условию, которое присутствует в завершенном списке (с помощьюfind
).5. Звучит логично, слишком много было потеряно в чтениях, чтобы довести это до конца. Спасибо