Лода sh найти для Массива объектов - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть следующий JsonArray:

arr = [
      {
        "name": "test",
        "alias": "alias1",
        "type": 1
      },
      {
        "name": "test",
        "type": 0
      },
      {
        "name": "abc",
        "alias": "alias2",
        "type": 1
      }
    ]

И я хочу найти, используя значение переменной (которая может содержать псевдоним / ключ). Таким образом, в первую очередь первое предпочтение поиска должно быть псевдонимом, и если псевдоним с тем же значением не найден, то он должен искать в «имя» и там, где «псевдоним» отсутствует .

Обычно это будет выглядеть так:

_.find(arr, {
 alias: value 
})

Но я хочу, чтобы код возвращал мне объект, где name = значение, если псевдоним = значение не найдено

1) Пример: значение = "alias1" Ожидается ==>

{
    "name": "test",
    "alias": "alias1",
    "type": 1
  }

2) Пример: значение = "test" Ожидается ==>

{
        "name": "test",
        "type": 0
      }

Ответы [ 3 ]

2 голосов
/ 25 февраля 2020

Вам нужно будет использовать find (_.find() или Array.find()) для поиска совпадения alias, и если ничего не найдено, используйте find снова для поиска совпадения name:

const findAliasOrName = (value, arr) =>
  _.find(arr, { alias: value }) || _.find(arr, { name: value });

const arr = [{"name":"test","type":0},{"name":"test","alias":"alias1","type":1},{"name":"abc","alias":"alias2","type":1}]

console.log(findAliasOrName('alias1', arr));
console.log(findAliasOrName('test', arr));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
0 голосов
/ 25 февраля 2020

Вы можете сделать это следующим образом:

, если ключ псевдоним доступен в obj, тогда сопоставьте значение с псевдоним , в противном случае сопоставьте значение с имя ключ с использованием троичного оператора

var arr = [
      {
        "name": "test",
        "alias": "alias1",
        "type": 1
      },
      {
        "name": "test",
        "type": 0
      },
      {
        "name": "abc",
        "alias": "alias2",
        "type": 1
      }
    ];

const findValue = (arr, value) => {
    return _.find(arr, (elem) => {
        return elem.alias ? elem.alias === value : elem.name === value;
    });
}

console.log(findValue(arr, 'alias1'));
console.log(findValue(arr, 'test'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
0 голосов
/ 25 февраля 2020

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

function find(array, value) {
    return _.find(array, o => o.alias === value || o.name === value)
}

var array = [{ name: "abc", alias: "abc_alias", type: 1 }, { name: "tofind", type: 2 }, { name: "def", alias: "al1", type: 3 }];

console.log(find(array, 'abc_alias'));
console.log(find(array, 'tofind'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js">
...