Есть ли другой способ проверить наличие нескольких значений в массиве объекта?
У меня есть приведенный ниже массив объектов, и 9X_.js я хочу проверить, присутствуют ли в этом 9X_javascript массиве два разных пользователя. Если они 9X_.js есть, мне нужно запустить некоторую логику
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-disabled работает, как и ожидалось, но я ищу для 9X_javascript этого другой подход. может кто-нибудь посоветовать?
Ответ #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_vanillajs
Ответ #2
Ответ на вопрос: Есть ли другой способ проверить наличие нескольких значений в массиве объекта?
Это довольно окольный способ сосредоточиться 9X_.js на логике, которую вы пытаетесь выразить. Обратите 9X_javascript-library внимание, что результат в hasMatch
даже не используется. Это 9X_ecmascript действительно все, что вам нужно, есть ли 9X_.js в массиве "значения".
Нет необходимости 9X_javascript-dom передавать значения в другой массив и проверять, есть 9X_vanilla-javascript ли в этом массиве значения. Просто проверьте, есть ли 9X_javascript они у исходного массива.
Это может быть так 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_.js условие в переменную:
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_javascript-library для ясности:
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_javascript действительными пользователями и отфильтровать свой массив, чтобы 9X_javascript-dom он соответствовал всем элементам, которые 9X_vanillajs являются этим массивом.
Это можно сделать 9X_javascript-execution с помощью 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-library
Ответ #5
Ответ на вопрос: Есть ли другой способ проверить наличие нескольких значений в массиве объекта?
Попробуйте использовать именованную функцию 9X_vanillajs и передать массив, ключ и одно или несколько 9X_javascript-execution значений с помощью оператора rest ...values
. Используйте 9X_javascript .flatMap()
для фильтрации с помощью
[...values].includes(obj[key]) // ["ABC", "XYZ"].includes(obj.name)
и любое несоответствие 9X_.js возвращает пустой массив []
. Конечным результатом 9X_javascript является массив с подмассивом и длиной указанного 9X_vanilla-javascript подмассива.
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