My Api returns this in json format
[
{
"title":"Category One",
"data":[
{
"id":"5",
"code":"0001",
"name":"Item Name"
},
{
"id":"6",
"code":"0002",
"name":"Item Name 2"
}
]
},
{
"title":"Category Two",
"data":[
{
"id":"7",
"code":"0003",
"name":"Item Name 3"
},
{
"id":"8",
"code":"0004",
"name":"Item Name 4"
}
]
}
]
I want to filter above given array by id I tried it like:
_.filter(data, ["title.data.id", "5"]);
But returns empty array, then i also tried it like:
_.filter(data, { data: [{ id: "5" }] });
But returns the full array.
Kindly guide what am i missing here.
You need to take the wanted properties and iterate the inner array as well.
var data = [{ title: "Category One", data: [{ id: "5", code: "0001", name: "Item Name" }, { id: "6", code: "0002", name: "Item Name 2" }] }, { title: "Category Two", data: [{ id: "7", code: "0003", name: "Item Name 3" }, { id: "8", code: "0004", name: "Item Name 4" }] }], result = _.filter(data, ({ data }) => _.some(data, ({ id }) => id === "5")); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
let obj = [ { "title": "Category One", "data": [ { "id": "5", "code": "0001", "name": "Item Name" }, { "id": "6", "code": "0002", "name": "Item Name 2" } ] }, { "title": "Category Two", "data": [ { "id": "7", "code": "0003", "name": "Item Name 3" }, { "id": "8", "code": "0004", "name": "Item Name 4" } ] } ] function getFilterResult(filterValue) { let result = {} for (let i = 0; i < obj.length; i++) { let data = obj[i]['data'] let index = data.findIndex(da => da.id === filterValue) if (index > -1) { result['title'] = obj[i].title data[index]['name']="New Item" /* added the code for updating the Name filed */ result['data'] = [data[index]] } } return result } let finalResult = getFilterResult("7") console.log(finalResult)
Using lodash
let data = [ { "title": "Category One", "data": [ { "id": "5", "code": "0001", "name": "Item Name" }, { "id": "6", "code": "0002", "name": "Item Name 2" } ] }, { "title": "Category Two", "data": [ { "id": "7", "code": "0003", "name": "Item Name 3" }, { "id": "8", "code": "0004", "name": "Item Name 4" } ] } ]; var output = _.find(data, item => _.find(item.data, d => d.id === '7')); output['data'][_.findIndex(output['data'], { id: '7' })]['name']= "New Item"; console.log(output)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
Here is solution with just simple JS
const data = [ { "title":"Category One", "data":[ { "id":"5", "code":"0001", "name":"Item Name" }, { "id":"6", "code":"0002", "name":"Item Name 2" } ] }, { "title":"Category Two", "data":[ { "id":"7", "code":"0003", "name":"Item Name 3" }, { "id":"8", "code":"0004", "name":"Item Name 4" } ] } ]; const requried = data.find(item => item.data.find(d => d.id === '5')); console.log(requried);
Using lodash
const data = [ { "title":"Category One", "data":[ { "id":"5", "code":"0001", "name":"Item Name" }, { "id":"6", "code":"0002", "name":"Item Name 2" } ] }, { "title":"Category Two", "data":[ { "id":"7", "code":"0003", "name":"Item Name 3" }, { "id":"8", "code":"0004", "name":"Item Name 4" } ] } ]; const required = _.find(data, item => _.find(item.data, d => d.id === '5')); console.log(required);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
You can do this with reduce and filter
const data = [ { title: 'Category One', data: [ { id: '5', code: '0001', name: 'Item Name', }, { id: '6', code: '0002', name: 'Item Name 2', }, ], }, { title: 'Category Two', data: [ { id: '7', code: '0003', name: 'Item Name 3', }, { id: '8', code: '0004', name: 'Item Name 4', }, ], }, ]; data.reduce((acc, curr) => { const val = curr.data.filter((d) => d.id == '5'); if (val.length) acc = [...acc, ...val]; return acc; }, []);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.