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;
  }
}