例如,在以下json数组中,每个元素都有name
和tracks.items
[
{
"name": "whatever",
"tracks": {
"items":
[
{
"item 1" : "some item"
},
...
]
}
},
{...}
...
]
在javascript中,我需要找到不同name
的数量,以及整个数组中找到的所有tracks.items
的长度(大小)之和。
我如何使用下划线或lodash来做到这一点?我已经尝试了_.countBy()
,但这只会返回个别计数
修改
谢谢你们
(替代解决方案)
const uniqueNames = new Set(array.map(item => item.name)).size
const totalItems = array.reduce((sum, item) => sum + item.tracks.items.length, 0)
答案 0 :(得分:1)
let obj = [{
"name": "whatever",
"tracks": {
"items":
[
{
"item 1" : "some item"
},
...
]
}
},
{...}
...
];
let uniqueNames = _.uniqBy(obj, 'name').length;
let totalItemes = _.reduce(obj, (result, value) => result += value.tracks.items.length, 0);
工作示例:
var obj = [{
"name": "whatever",
"tracks": {
"items": [{
"item 1": "some item"
},
{
"item 2": "some item"
}, {
"item 3": "some item"
}
]
}
}, {
"name": "whatever",
"tracks": {
"items": [{
"item 4": "some item"
},
{
"item 5": "some item"
}, {
"item 6": "some item"
}, {
"item 7": "some item"
}
]
}
}, {
"name": "whatever2",
"tracks": {
"items": [{
"item 8": "some item"
},
{
"item 9": "some item"
}, {
"item 10": "some item"
}, {
"item 11": "some item"
}
]
}
}]
let names = _.uniqBy(obj, 'name');
let uniqueNames = names.length
let items = _.reduce(obj, (result, value) => result += value.tracks.items.length, 0)
console.log(names);
console.log(uniqueNames)
console.log(items)

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
&#13;
答案 1 :(得分:1)
作为Stucco noted in his answer,您可以通过name
检查_.uniqBy()
的结果长度来获取唯一名称的数量。
您可以使用_.sumBy()
获取曲目项目的总金额。
var arr = [{"name":"whatever","tracks":{"items":[{"item 1":"some item"},{"item 2":"some item"},{"item 3":"some item"}]}},{"name":"whatever","tracks":{"items":[{"item 4":"some item"},{"item 5":"some item"},{"item 6":"some item"},{"item 7":"some item"}]}},{"name":"whatever2","tracks":{"items":[{"item 8":"some item"},{"item 9":"some item"},{"item 10":"some item"},{"item 11":"some item"}]}}];
var uniqueNamesCount = _.uniqBy(arr, 'name').length;
var totalTracksItemsCount = _.sumBy(arr, 'tracks.items.length');
console.log('uniqueNamesCount', uniqueNamesCount); // 2
console.log('totalTracksItemsCount', totalTracksItemsCount); // 11
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
&#13;