Есть ли другой способ проверить наличие нескольких значений в массиве объекта?

У меня есть приведенный ниже массив объектов, и 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 этого другой подход. может кто-нибудь посоветовать?

2
0
5
Общее количество ответов: 5

Ответ #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

10
0

Ответ #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 }

2
0

Ответ #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)

2
0

Ответ #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

2
0

Ответ #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")); 

2
0