如何将 json 对象键转换为不同的数组来删除重复项

Posted

技术标签:

【中文标题】如何将 json 对象键转换为不同的数组来删除重复项【英文标题】:How to convert json object keys into different arrays removing the duplicate 【发布时间】:2021-12-11 20:33:18 【问题描述】:

我有这样的 JSON,我需要将此 JSON 与 JSON 对象中的所有键分组,值应该在数组中(不包括重复项)。

var people = [
    sex:"Male", name:"Jeff",
    sex:"Female", name:"Megan",
    sex:"Male", name:"Taylor",
    sex:"Female", name:"Madison"
];

我的输出应该是这样的

"sex":["Male","Female"],"name":["Jeff","Megan","Taylor","Madison"]

我们如何才能做到这一点

【问题讨论】:

【参考方案1】:
function getValues(array) 
    var result = ;
    array.forEach(obj => 
        Object.keys(obj).forEach(key =>  
        if(!Array.isArray(result[key])) 
            result[key] = [];
        result[key].push(obj[key]);
        )
    )
return result;

【讨论】:

typeof 不能用于检查某事物是否为数组。只需检查 typeof result[key] === "undefined"result[key] instanceof ArrayArray.isArray() 我的错,忘记了。【参考方案2】:

您可以使用Array.reduce() 方法将您的数组转换为单个对象:

var people = [
    sex:"Male", name:"Jeff",
    sex:"Female", name:"Megan",
    sex:"Male", name:"Taylor",
    sex:"Female", name:"Madison"
];

const transformed = people.reduce((acc, e) => 
  Object.keys(e).forEach((k) => 
    if (!acc[k]) acc[k] = [];
    if (!acc[k].includes(e[k])) acc[k].push(e[k]);
  );
  return acc;
, );

console.log(transformed);

如果对象键之一(在这种情况下为性别或姓名)的值数组不存在,则创建它。在将值推入任何值数组之前,会验证该值是否已存在于该数组中。

【讨论】:

以上是关于如何将 json 对象键转换为不同的数组来删除重复项的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组转换成JSON-CSDN论坛

将 JSON 键转换为对象 [重复]

将表单数据数组对象转换为 JSON [重复]

mySQL中的JSON操作

Unity C#:如何将类的数组转换为 JSON [重复]

将带有数字键的 JavaScript 对象转换为数组