如何将 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 Array
或 Array.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 对象键转换为不同的数组来删除重复项的主要内容,如果未能解决你的问题,请参考以下文章