Javascript 计算 json 数组中的不同值和总和列表
Javascript count distinct value and sum lists in json array
例如,在下面的 json 数组中,每个元素都有一个 name
和 tracks.items
中的可变项目列表
[
{
"name": "whatever",
"tracks": {
"items":
[
{
"item 1" : "some item"
},
...
]
}
},
{...}
...
]
在javascript中,我需要找到不同name
的数量,以及整个tracks.items
中找到的所有tracks.items
的长度(大小)之和数组。
我如何使用下划线或 lodash 来做到这一点?我试过 _.countBy()
但只有 returns 个人算
编辑
谢谢大家
(替代解决方案)
const uniqueNames = new Set(array.map(item => item.name)).size
const totalItems = array.reduce((sum, item) => sum + item.tracks.items.length, 0)
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>
作为 you can get the number of unique names, by checking the length of the result of _.uniqBy()
通过 name
。
您可以使用 _.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
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
例如,在下面的 json 数组中,每个元素都有一个 name
和 tracks.items
[
{
"name": "whatever",
"tracks": {
"items":
[
{
"item 1" : "some item"
},
...
]
}
},
{...}
...
]
在javascript中,我需要找到不同name
的数量,以及整个tracks.items
中找到的所有tracks.items
的长度(大小)之和数组。
我如何使用下划线或 lodash 来做到这一点?我试过 _.countBy()
但只有 returns 个人算
编辑
谢谢大家
(替代解决方案)
const uniqueNames = new Set(array.map(item => item.name)).size
const totalItems = array.reduce((sum, item) => sum + item.tracks.items.length, 0)
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>
作为 _.uniqBy()
通过 name
。
您可以使用 _.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
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>