Выборочно вернуть часть сопоставленного объекта в фильтр - PullRequest
1 голос
/ 13 января 2020

Как выборочно возвращать только часть сопоставленного объекта при повторении метода фильтра списка.

Например:

let comments = [{
    "postId": 6,
    "status": "ACTIVE",
    "id": 28,
    "name": "quo voluptates voluptas nisi veritatis dignissimos dolores ut officiis",
    "email": "Ronny@rosina.org",
    "body": "voluptatem repellendus quo alias at laudantium\nmollitia quidem esse\ntemporibus consequuntur vitae rerum illum\nid corporis sit id"
  },
  {
    "postId": 6,
    "id": 29,
    "status": "INACTIVE",
    "name": "eum distinctio amet dolor",
    "email": "Jennings_Pouros@erica.biz",
    "body": "tempora voluptatem est\nmagnam distinctio autem est dolorem\net ipsa molestiae odit rerum itaque corporis nihil nam\neaque rerum error"
  }
];

comments.filter((ob, i) => {
  return ob.status == "ACTIVE" && ob.id
})

здесь, запуск фильтра на comments возвращает соответствующий объект, но я хочу вернуть только список id

Ответы [ 6 ]

3 голосов
/ 13 января 2020
comments.filter((ob, i) => {
  return ob.status == "ACTIVE" && ob.id
}).map(({id}) => id)
2 голосов
/ 13 января 2020

Два решения:

Использовать карту после фильтра

let comments = [{
    "postId": 6,
    "status": "ACTIVE",
    "id": 28,
    "name": "quo voluptates voluptas nisi veritatis dignissimos dolores ut officiis",
    "email": "Ronny@rosina.org",
    "body": "voluptatem repellendus quo alias at laudantium\nmollitia quidem esse\ntemporibus consequuntur vitae rerum illum\nid corporis sit id"
  },
  {
    "postId": 6,
    "id": 29,
    "status": "INACTIVE",
    "name": "eum distinctio amet dolor",
    "email": "Jennings_Pouros@erica.biz",
    "body": "tempora voluptatem est\nmagnam distinctio autem est dolorem\net ipsa molestiae odit rerum itaque corporis nihil nam\neaque rerum error"
  }
];

const arr = comments.filter((ob, i) => {
  return ob.status == "ACTIVE"
}).map(ob => ob.id)

Использование reduce

let comments = [{
    "postId": 6,
    "status": "ACTIVE",
    "id": 28,
    "name": "quo voluptates voluptas nisi veritatis dignissimos dolores ut officiis",
    "email": "Ronny@rosina.org",
    "body": "voluptatem repellendus quo alias at laudantium\nmollitia quidem esse\ntemporibus consequuntur vitae rerum illum\nid corporis sit id"
  },
  {
    "postId": 6,
    "id": 29,
    "status": "INACTIVE",
    "name": "eum distinctio amet dolor",
    "email": "Jennings_Pouros@erica.biz",
    "body": "tempora voluptatem est\nmagnam distinctio autem est dolorem\net ipsa molestiae odit rerum itaque corporis nihil nam\neaque rerum error"
  }
];

const res = comments.reduce((pre, cur) => {
  if (cur.status === "ACTIVE") {
    return [...pre, cur.id]
  } else {
    return pre
  }
}, [])

Я думаю, что первый может быть легким для понимания.

После того, как это уменьшение, сделайте c: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

2 голосов
/ 13 января 2020

Вы можете использовать карту в своем коде для достижения этой цели. Карта

Вот рабочий код.

comments.map(function (data) {
  return data.id
});

Это вернет массив id, который присутствует в комментариях.

1 голос
/ 13 января 2020

Вы можете реализовать map() с помощью Разрушающее присваивание :

let comments = [{
    "postId": 6,
    "status": "ACTIVE",
    "id": 28,
    "name": "quo voluptates voluptas nisi veritatis dignissimos dolores ut officiis",
    "email": "Ronny@rosina.org",
    "body": "voluptatem repellendus quo alias at laudantium\nmollitia quidem esse\ntemporibus consequuntur vitae rerum illum\nid corporis sit id"
  },
  {
    "postId": 6,
    "id": 29,
    "status": "INACTIVE",
    "name": "eum distinctio amet dolor",
    "email": "Jennings_Pouros@erica.biz",
    "body": "tempora voluptatem est\nmagnam distinctio autem est dolorem\net ipsa molestiae odit rerum itaque corporis nihil nam\neaque rerum error"
  }
];

comments = comments.filter((ob, i) => {
  return ob.status == "ACTIVE" && ob.id
}).map(({id}) => ({id}));

console.log(comments);
1 голос
/ 13 января 2020

Вы можете использовать reduce метод и проверить условие c.status == "ACTIVE" && c.id. Если условие выполнено, вы можете ввести значение sh в массив:

const result = comments.reduce((a, c)=> {
   if (c.status == "ACTIVE" && c.id)
       a.push(c.id);
   return a;
}, [])

Пример:

let comments = [{
  "postId": 6,
  "status": "ACTIVE",
  "id": 28,
  "name": "quo voluptates voluptas nisi veritatis dignissimos dolores ut officiis",
  "email": "Ronny@rosina.org",
  "body": "voluptatem repellendus quo alias at laudantium\nmollitia quidem esse\ntemporibus consequuntur vitae rerum illum\nid corporis sit id"
},
{
  "postId": 6,
  "id": 29,
  "status": "INACTIVE",
  "name": "eum distinctio amet dolor",
  "email": "Jennings_Pouros@erica.biz",
  "body": "tempora voluptatem est\nmagnam distinctio autem est dolorem\net ipsa molestiae odit rerum itaque corporis nihil nam\neaque rerum error"
}
];

const result = comments.reduce((a, c)=> {
  if (c.status == "ACTIVE" && c.id)
    a.push(c.id);
  return a;
  }, [])

console.log(result);
0 голосов
/ 13 января 2020

Мне кажется, что для этого вы используете два разных цикла . Вы можете сделать это просто используя 1 for of l oop, как показано ниже:

let comments = [{
    "postId": 6,
    "status": "ACTIVE",
    "id": 28,
    "name": "quo voluptates voluptas nisi veritatis dignissimos dolores ut officiis",
    "email": "Ronny@rosina.org",
    "body": "voluptatem repellendus quo alias at laudantium\nmollitia quidem esse\ntemporibus consequuntur vitae rerum illum\nid corporis sit id"
  },
  {
    "postId": 6,
    "id": 29,
    "status": "INACTIVE",
    "name": "eum distinctio amet dolor",
    "email": "Jennings_Pouros@erica.biz",
    "body": "tempora voluptatem est\nmagnam distinctio autem est dolorem\net ipsa molestiae odit rerum itaque corporis nihil nam\neaque rerum error"
  }
];

const matchedCommentsIds = []
for (const {status, id}of comments) {

  if (status == "ACTIVE" && id){
    matchedCommentsIds.push(id)
  }
}

console.log(matchedCommentsIds)

enter image description here

Если мы использовали filter и map функции, то основным недостатком является то, что мы повторяем массив два раза, что не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...