Есть ли другой способ проверить наличие нескольких значений в массиве объекта?
У меня есть приведенный ниже массив объектов, и 9X_.js я хочу проверить, присутствуют ли в этом 9X_javascript-execution массиве два разных пользователя. Если они 9X_javascript-library есть, мне нужно запустить некоторую логику
let result = [{"name": "ABC"},{"name": "CDE"},{"name": "FGH"},{"name": "XYZ"}];
var newArr = [];
var hasMatch = result.filter(function(val) {
if (val.name == "FGH"){
newArr.push(val)
} else if (val.name == "ABC") {
newArr.push(val)
}
});
console.log(newArr)
if (newArr.length == 2) {
//do logic
}
Это 9X_javascript-dom работает, как и ожидалось, но я ищу для 9X_vanillajs этого другой подход. может кто-нибудь посоветовать?
Ответ #1
Ответ на вопрос: Есть ли другой способ проверить наличие нескольких значений в массиве объекта?
Не оптимизирован для скорости, но работает
let arr = [
{
"name": "ABC"
},
{
"name": "CDE"
},
{
"name": "FGH"
},
{
"name": "XYZ"
}
];
let users = ["ABC", "XYZ"]
let hasAllUsers = users.every(user => arr.some(item => item.name == user))
console.log(hasAllUsers)
// if(hasAllUser) {...}
9X_javascript-library
Ответ #2
Ответ на вопрос: Есть ли другой способ проверить наличие нескольких значений в массиве объекта?
Это довольно окольный способ сосредоточиться 9X_javascript-dom на логике, которую вы пытаетесь выразить. Обратите 9X_javascript-execution внимание, что результат в hasMatch
даже не используется. Это 9X_vanilla-javascript действительно все, что вам нужно, есть ли 9X_vanilla-javascript в массиве "значения".
Нет необходимости 9X_javascript-dom передавать значения в другой массив и проверять, есть 9X_javascript ли в этом массиве значения. Просто проверьте, есть ли 9X_ecmascript они у исходного массива.
Это может быть так 9X_javascript-disabled же просто, как:
let result = [{"name": "ABC"},{"name": "CDE"},{"name": "FGH"},{"name": "XYZ"}];
if (result.filter(r => r.name === "FGH" || r.name === "ABC").length === 2) {
// do logic
}
Или, если вы хотите преобразовать 9X_vanillajs условие в переменную:
let result = [{"name": "ABC"},{"name": "CDE"},{"name": "FGH"},{"name": "XYZ"}];
let hasMatch = result.filter(r => r.name === "FGH" || r.name === "ABC").length === 2;
if (hasMatch) {
// do logic
}
Или немного более подробно 9X_.js для ясности:
let result = [{"name": "ABC"},{"name": "CDE"},{"name": "FGH"},{"name": "XYZ"}];
let filteredResult = result.filter(r => r.name === "FGH" || r.name === "ABC");
let hasMatch = filteredResult.length === 2;
if (hasMatch) {
// do logic
}
Ответ #3
Ответ на вопрос: Есть ли другой способ проверить наличие нескольких значений в массиве объекта?
Вы можете просто создать другой массив с 9X_vanilla-js действительными пользователями и отфильтровать свой массив, чтобы 9X_javascript-library он соответствовал всем элементам, которые 9X_vanillajs являются этим массивом.
Это можно сделать 9X_vanilla-js с помощью Array#includes method
const users = [{"name": "ABC"},{"name": "CDE"},{"name": "FGH"},{"name": "XYZ"}];
const validUsers = ["ABC", "FGH", "AnotherUser"];
const matchUsers = users.filter(user => validUsers.includes(user.name))
console.log(matchUsers)
Ответ #4
Ответ на вопрос: Есть ли другой способ проверить наличие нескольких значений в массиве объекта?
Вы можете посчитать разыскиваемые имена.
const
data = [{ name: "ABC" }, { name: "CDE" }, { name: "FGH" }, { name: "XYZ" }],
names = ['ABC', 'FGH'],
result = data.reduce((t, { name }) => t + names.includes(name), 0);
console.log(result);
9X_javascript-execution
Ответ #5
Ответ на вопрос: Есть ли другой способ проверить наличие нескольких значений в массиве объекта?
Попробуйте использовать именованную функцию 9X_javascript-execution и передать массив, ключ и одно или несколько 9X_javascript-disabled значений с помощью оператора rest ...values
. Используйте 9X_vanilla-js .flatMap()
для фильтрации с помощью
[...values].includes(obj[key])
// ["ABC", "XYZ"].includes(obj.name)
и любое несоответствие 9X_javascript-dom возвращает пустой массив []
. Конечным результатом 9X_javascript-library является массив с подмассивом и длиной указанного 9X_ecmascript подмассива.
const result = [["ABC", "XYZ"], 2]
// result[0][0] = "ABC"
// result[0][1] = "XYZ"
// result[1] = 2
const arr = [{"name": "ABC"},{"name": "CDE"},{"name": "FGH"},{"name": "XYZ"}];
function hasMatch(array, key, ...values) {
const result = array.flatMap((obj, idx) =>
[...values].includes(obj[key]) ? obj : []);
return [result, result.length];
}
console.log(hasMatch(arr, "name", "ABC", "XYZ"));
console.log(hasMatch(arr, "name", "FGH", "IJK", "LMN", "ABC", "XYZ"));
-
13
-
6
-
6
-
12
-
38
-
9
-
5
-
18
-
5
-
5
-
6
-
8
-
5
-
7
-
41
-
10
-
10
-
27
-
9
-
20
-
15
-
12
-
41
-
8
-
9
-
12
-
43
-
4
-
7
-
24
-
3
-
20
-
9
-
23
-
11
-
10
-
7
-
4
-
5
-
25
-
6
-
11
-
10
-
86
-
4
-
4
-
25
-
20
-
13
-
8