Вы можете использовать Array.filtered()
с Array.includes()
(или эквивалентами lodash) для фильтрации массива, а затем Array.map()
, чтобы получить список имен:
const filterById = (id, arr) => {
const filtered = arr.filter(({ ids }) => ids.includes(id))
.map(({ name }) => name);
return filtered.length ? filtered : ['missing'];
}
const users = [{"name":"missing!","ids":["Not Specified"]},{"name":"user1","ids":["C.001","C.002","C.001.001"]},{"name":"user2","ids":["C.001","C.002","C.004","C.001.001"]},{"name":"user3","ids":["C.001","C.002","C.004","C.001.001"]},{"name":"user4","ids":["C.001","C.002","C.004","C.001.001"]}]
console.log(filterById('C.001.001', users));
console.log(filterById('132133333', users));
И та же идея с lodash / fp :
const { flow, filter, get, includes, map, cond, isEmpty, constant, stubtrue, identity } = _
const filterById = id => flow(
filter(flow(get('ids'), includes(id))),
cond([
[isEmpty, constant(['missing'])],
[stubtrue, map('name')]
])
)
const users = [{"name":"missing!","ids":["Not Specified"]},{"name":"user1","ids":["C.001","C.002","C.001.001"]},{"name":"user2","ids":["C.001","C.002","C.004","C.001.001"]},{"name":"user3","ids":["C.001","C.002","C.004","C.001.001"]},{"name":"user4","ids":["C.001","C.002","C.004","C.001.001"]}]
console.log(filterById('C.001.001')(users));
console.log(filterById('132133333')(users));
<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>