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

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

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_javascript-library

10
0

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

2
0

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

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-execution

2
0

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

2
0