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

Как правильно разделить массив?

Здравствуйте. Подскажите, пожалуйста, как правильно разделить массив?
const arr = {
  list: [
    {id: 1, pos: {dv: "T5"}},
    {id: 2, pos: {dv: "T10"}},
    {id: 3, pos: {dv: "T12"}},
    {id: 4, pos: {dv: "T11"}},
    {id: 5, pos: {dv: "T45"}},
    {id: 6, pos: {dv: "T56"}},
    {id: 7, pos: {dv: "T38"}},
    {id: 8, pos: {dv: "T-9"}},
    {id: 9, pos: {dv: "T0"}}
  ]
};

Мне необходимо по условию, если свойство dv значение T больше или равно 38 получить следующую структуру:
const arr1 = {
  list: [
    {id: 8, pos: {dv: "T-9"}},
    {id: 9, pos: {dv: "T0"}},
    {id: 1, pos: {dv: "T5"}},
    {id: 2, pos: {dv: "T10"}},
    {id: 4, pos: {dv: "T11"}},
    {id: 3, pos: {dv: "T12"}},
  ]
};

const arr2 = {
  list: [
    {id: 5, pos: {dv: "T45"}},
    {id: 6, pos: {dv: "T56"}}
  ]
};
  • Вопрос задан
  • 97 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const [ arr1, arr2 ] = arr.list
  .map(n => [ n, +n.pos.dv.slice(1) ])
  .sort((a, b) => a[1] - b[1])
  .reduce((acc, n) => (acc[+(n[1] >= 38)].push(n[0]), acc), [ [], [] ])
  .map(n => ({ list: n }));
Ответ написан
@Interface
lodash хорошо решает эту задачу, посмотрите метод partition: https://lodash.com/docs/4.17.11#partition

const arr = {
  list: [
    {id: 1, pos: {dv: "T5"}},
    {id: 2, pos: {dv: "T10"}},
    {id: 3, pos: {dv: "T12"}},
    {id: 4, pos: {dv: "T11"}},
    {id: 5, pos: {dv: "T45"}},
    {id: 6, pos: {dv: "T56"}},
    {id: 7, pos: {dv: "T38"}},
    {id: 8, pos: {dv: "T-9"}},
    {id: 9, pos: {dv: "T0"}}
  ]
};

_.partition(arr.list, obj => Number(obj.pos.dv.slice(1)) >= 38)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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