首页 > 解决方案 > 按相同的 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},
    ]
  },
]

标签: javascriptarrays

解决方案


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)

推荐阅读