javascript - 按相同的 id 过滤数组
问题描述
我得到了一个这样的数组,我需要用相同的用户 id 过滤这个数组,所有出现的 service_id 对应于 user_id:
Array [
Object {
"service_id": 14,
"user_id": 56,
},
Object {
"service_id": 19,
"user_id": 59,
},
Object {
"service_id": 18,
"user_id": 56,
},
Object {
"service_id": 18,
"user_id": 56,
},
]
我需要像这样过滤数组:
Array [
Object {
"user_id": 56,
[
{"service_id":14},
{"service_id": 18}
]
},
Object {
"user_id": 59,
[
{"service_id": 19},
]
},
]
解决方案
var array = [{"service_id": 14,"user_id": 56,},{"service_id": 19,"user_id": 59,},
{"service_id": 18,"user_id": 56,},{"service_id": 18,"user_id": 56}]
const groupByUserId = (array, key) => {
return array.reduce((result, currentValue) => {(
//Create a new array as key if there is not found
result[currentValue[key]] = result[currentValue[key]] || []).push(currentValue);
return result;
}, {}); // empty object after initialization
};
const grouped = groupByUserId(array, 'user_id');
console.log(grouped)
在 Javascript 中,您的数组应如下所示:
var array = [{"service_id": 14,"user_id": 56},{"service_id": 19,"user_id": 59},
{"service_id": 18,"user_id": 56},{"service_id": 18,"user_id": 56}]
这里假设将user_id标识为新分组数组中的键,以便在其相应数组中填充用户的相似service_id 。
const groupByUserId = (array, key) => {
return array.reduce((result, currentValue) => {(
//Create a new array as key if there is not found
result[currentValue[key]] = result[currentValue[key]] || []).push(currentValue);
return result;
}, {}); // empty object after initialization
};
const grouped = groupByUserId(array, 'user_id');
console.log(grouped)
推荐阅读
- html - 如何在电子邮件html中使用旁边的单词制作可调节的分隔线?
- oracle - 从函数更新列的过程
- ruby - 将实例方法传递给 #each 的简洁方法
- react-native - 为什么 React Native 返回一个与布尔值等效的字符串?
- vuejs2 - bootstrap-vue 组件呈现为注释
- r - 有没有一种在一个图上绘制两条回归线的好方法?
- angular - Angular 7 应用程序中的样式标签,它们来自哪里
- python - 如何只添加那些尚未添加到数据库中的记录
- spring - 从 weblogic.xml 为 HTTPS 设置安全 cookie
- laravel - 当我从数据库中提取数据时,表未显示