Найти значение в массиве населенных объектов mongdb - lodash - PullRequest
0 голосов
/ 14 февраля 2019

Возможно, этот вопрос дублируется или задавался несколько раз по-разному, но все еще не решил мою проблему.Я создаю API-интерфейс nodejs, возвращающий 10000 заполненных объектов из mongodb.Я хочу отфильтровать массив на основе объекта.

{color: red}

Как использовать фильтр lodash для возврата массива с указанным объектом фильтра.

[
  {
    "value": 200,
    "newEle": {
      "gradient": "true",
      "mode": {
        "color": "red"
      }
    }
  },
  {
    "value": 100,
    "newEle": {
      "gradient": "false",
      "mode": {
        "color": "blue"
      }
    }
  }
]

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

При использовании lodash это так просто.

 let filtered_array = _.filter(myArr, { color: 'red' });

Однако, поскольку вы вложили вложенные объекты, вы захотите создать предикат, который обращается к вложенному значению.Вы делаете это с массивом.

 let filtered_array = _.filter(myArr, ['newEle.mode.color', 'red']);
0 голосов
/ 14 февраля 2019

Если вы специально пытаетесь фильтровать только по цвету, вы можете использовать vanilla JS .filter(), чтобы получить все объекты со свойством color red в новый массив:

const arr = [
  {
    "value": 200,
    "newEle": {
      "gradient": "true",
      "mode": {
        "color": "red"
      }
    }
  },
  {
    "value": 100,
    "newEle": {
      "gradient": "false",
      "mode": {
        "color": "blue"
      }
    }
  }
],
color = "red",
res = arr.filter(obj => obj.newEle.mode.color === color);

console.log(res);

Если вы хотите использовать lodash специально, вы можете использовать _.filter():

const arr = [
  {
    "value": 200,
    "newEle": {
      "gradient": "true",
      "mode": {
        "color": "red"
      }
    }
  },
  {
    "value": 100,
    "newEle": {
      "gradient": "false",
      "mode": {
        "color": "blue"
      }
    }
  }
],
color = "red",
res = _.filter(arr, obj => obj.newEle.mode.color === color);

console.log(res);
<script src="https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js"></script>
...