|
|
1
Akrion
6 年前
你可以这样做:
var data = { "total_results": 78, "resources": [ { "metadata": { "verified_at": "2018-10-17T21:07:43.935Z", "linkages": [{ "origin": "ABC", "id": "a" }, { "origin": "XYZ", "id": "b" }] } }, { "metadata": { "verified_at": "2018-10-17T21:07:43.935Z", "linkages": [{ "origin": "ABC", "id": "c" }, { "origin": "XYZ", "id": "d" }] } } ] }
const result = _(data.resources)
.flatMap('metadata.linkages')
.filter(['origin', 'ABC'])
.map('id')
.value()
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
用链子和
flatMap
filter
&
map
另一种方法是
flatMap
reduce
:
var data = { "total_results": 78, "resources": [ { "metadata": { "verified_at": "2018-10-17T21:07:43.935Z", "linkages": [{ "origin": "ABC", "id": "a" }, { "origin": "XYZ", "id": "b" }] } }, { "metadata": { "verified_at": "2018-10-17T21:07:43.935Z", "linkages": [{ "origin": "ABC", "id": "c" }, { "origin": "XYZ", "id": "d" }] } } ] }
const result = _(data.resources)
.flatMap('metadata.linkages')
.reduce((r,c) => (_.isEqual(c.origin, 'ABC') ? r.push(c.id) : null, r), [])
console.log(result)
<脚本src=“https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js“></script>
var data = { "total_results": 78, "resources": [{ "metadata": { "verified_at": "2018-10-17T21:07:43.935Z", "linkages": [{ "origin": "ABC", "id": "a" }, { "origin": "XYZ", "id": "b" }] } }, { "metadata": { "verified_at": "2018-10-17T21:07:43.935Z", "linkages": [{ "origin": "ABC", "id": "c" }, { "origin": "XYZ", "id": "d" }] } }] }
const result = _.reduce(data.resources, (r,c) =>
(r.push(_.find(c.metadata.linkages, {origin: 'ABC'}).id), r), [])
console.log(result)
<脚本src=“https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js“></script>
使用ES6,您可以执行以下操作:
var data = { "total_results": 78, "resources": [{ "metadata": { "verified_at": "2018-10-17T21:07:43.935Z", "linkages": [{ "origin": "ABC", "id": "a" }, { "origin": "XYZ", "id": "b" }] } }, { "metadata": { "verified_at": "2018-10-17T21:07:43.935Z", "linkages": [{ "origin": "ABC", "id": "c" }, { "origin": "XYZ", "id": "d" }] } }] }
const result = data.resources.reduce((r,c) =>
(r.push(c.metadata.linkages.find(x => x.origin == 'ABC').id), r), [])
console.log(result)
|