Javascript 获取此阵列模型的配对数据的最佳方法是什么?
我是编程界的新手,请帮帮我。任何帮助都将不胜感激! 我有一个包含如下所示数据的数组。我必须使数据在每个组中只按顺序包含成对的Javascript 获取此阵列模型的配对数据的最佳方法是什么?,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我是编程界的新手,请帮帮我。任何帮助都将不胜感激! 我有一个包含如下所示数据的数组。我必须使数据在每个组中只按顺序包含成对的user\u id。如果要配对,则配对的用户id应该不同 [ {"user_id": 35, "group": "A"}, {"user_id": 40, "group": "B"}, {"user_id": 39, "group": "B"}, {"user_id": 39, "group": "B"}, {
user\u id
。如果要配对,则配对的用户id
应该不同
[
{"user_id": 35, "group": "A"},
{"user_id": 40, "group": "B"},
{"user_id": 39, "group": "B"},
{"user_id": 39, "group": "B"},
{"user_id": 39, "group": "B"},
{"user_id": 40, "group": "B"},
{"user_id": 39, "group": "B"},
{"user_id": 39, "group": "B"},
{"user_id": 40, "group": "C"},
{"user_id": 39, "group": "C"}
]
因此,数据如下所示:
for(var i = 0; arr.length > i;) {
if (!arr[i+1] || arr[i].group != arr[i+1].group) {
//arr[i] is last in the group
arr.splice(i, 1);
} else if (arr[i].user_id == arr[i+1].user_id || (arr[i-1] && arr[i].user_id == arr[i-1].user_id && arr[i].group == arr[i-1].group)) {
//next or previous item have same id and group
arr.splice(i, 1);
} else {
//arr[i] and arr[i+1] is a valid pair
i += 2;
}
}
第一项已删除,因为它没有对。
第5项和第6项被删除,因为它们彼此具有相同的用户id(用户id
如果要配对,则应不同)
实现这一点的最佳方法是什么(使用拼接方法或创建一个新阵列,然后推动它,或其他方法) 您可以使用在中给出的方法仅获取数组中的不同值,然后删除没有任何对的值
[
{"user_id": 35, "group": "A"}, <-- remove
{"user_id": 40, "group": "B"},
{"user_id": 39, "group": "B"},
{"user_id": 40, "group": "C"},
{"user_id": 39, "group": "C"}
]
[
{“user_id”:35,“group”:“A”},您可以这样做:
for(var i = 0; arr.length > i;) {
if (!arr[i+1] || arr[i].group != arr[i+1].group) {
//arr[i] is last in the group
arr.splice(i, 1);
} else if (arr[i].user_id == arr[i+1].user_id || (arr[i-1] && arr[i].user_id == arr[i-1].user_id && arr[i].group == arr[i-1].group)) {
//next or previous item have same id and group
arr.splice(i, 1);
} else {
//arr[i] and arr[i+1] is a valid pair
i += 2;
}
}
var-arr=[
{“user_id”:35,“group”:“A”},//这是一个基于过滤器
和减少
的解决方案:
var input=[{“user_id”:35,“group”:“A”},
{“用户id”:40,“组”:“B”},
{“用户id”:39,“组”:“B”},
{“用户id”:39,“组”:“B”},
{“用户id”:39,“组”:“B”},
{“用户id”:40,“组”:“B”},
{“用户id”:39,“组”:“B”},
{“用户id”:39,“组”:“B”},
{“用户id”:40,“组”:“C”},
{“用户id”:39,“组”:“C”}];
var输出=输入。过滤器(函数(el、idx、输入){
//筛选唯一记录
下一步=输入[idx+1];
return!next | | el.group!==next.group | | el.user_id!==next.user_id;
}).reduce(功能(前置、el、idx、输入){
//如果在同一组中,则配对
下一步=输入[idx+1];
返回(上一个长度%2 | | next&&el.group==next.group)
前混凝土([el]):前混凝土;
}, []);
//输出
document.body.innerHTML=JSON.stringify(输出).replace(/\},/g,'}
');
for(var i = 0; arr.length > i;) {
if (!arr[i+1] || arr[i].group != arr[i+1].group) {
//arr[i] is last in the group
arr.splice(i, 1);
} else if (arr[i].user_id == arr[i+1].user_id || (arr[i-1] && arr[i].user_id == arr[i-1].user_id && arr[i].group == arr[i-1].group)) {
//next or previous item have same id and group
arr.splice(i, 1);
} else {
//arr[i] and arr[i+1] is a valid pair
i += 2;
}
}