Задать вопрос
@jizzy

Как из массива достать объекты, у которых одно из свойств имеет определённые значения?

const arr = [
  { "Name": "Alex", "sex":"man","age":50,"workplace":"office"},
  {"Name": "Katya", "sex":"woman","age":33,"workplace":"office"},
  {"Name": "Igor", "sex":"man","age":22,"workplace":"park"},
  {"Name": "Olga", "sex":"woman","age":19,"workplace":"park"},
  {"Name": "Maks", "sex":"man","age":40,"workplace":"hotel"}
];

let arr2 = [];

for(let prop in arr){
  if(arr[prop].workplace == "office"){
    arr2.push(arr[prop]);
  }
}

console.log(arr2);

Мне нужно вывести не только обьекты с office, а чтобы еще выводило hotel, как это сделать?
  • Вопрос задан
  • 186 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Какое свойство смотрим, какие значения хотим увидеть:

const key = 'workplace';
const values = [ 'office', 'hotel' ];

Достаём объекты:

const result = arr.filter(function(n) {
  return this.has(n[key]);
}, new Set(values));

// или

const result = values.flatMap(((grouped, n) => grouped[n] ?? []).bind(
  null,
  arr.reduce((acc, n) => ((acc[n[key]] = acc[n[key]] ?? []).push(n), acc), {})
));

// или

const result = [];
for (const n of arr) {
  for (const m of values) {
    if (m === n[key]) {
      result.push(n);
      break;
    }
  }
}

// или

const result = [];
for (let i = 0; i < arr.length; i++) {
  if (~values.indexOf(arr[i][key])) {
    result[result.length] = arr[i];
  }
}

// или

const result = (function get(i, n = arr[i]) {
  return n
    ? [].concat(values.includes(n[key]) ? n : [], get(-~i))
    : [];
})(0);
Ответ написан
Комментировать
Kasperenysh
@Kasperenysh
Рецидив в особо острой форме))
var arr = [{ "Name": "Alex", "sex":"man","age":50,"workplace":"office"},
{"Name": "Katya", "sex":"woman","age":33,"workplace":"office"},
{"Name": "Igor", "sex":"man","age":22,"workplace":"park"},
{"Name": "Olga", "sex":"woman","age":19,"workplace":"park"},
{"Name": "Maks", "sex":"man","age":40,"workplace":"hotel"}
var arr2 = [];

for(var prop in arr){
if(arr[prop].workplace == "office" || arr[prop].workplace == "hotel"){
arr2.push(arr[prop]);
}
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы