gpt4 book ai didi

Javascript - 更改嵌套数组中所有对象键的名称

转载 作者:行者123 更新时间:2023-12-03 07:23:45 24 4
gpt4 key购买 nike

这是我得到的数组:

const packages = [
{
id: '641a1690-6c8b-4ada-ae97-8d82cc4fe7a3',
name: 'com.sample',
children: {
id: 'd7384f60-e4ab-4a86-8e2e-0f66cc32f',
name: 'child.computer.com',
children: { id: 'e4ab-4a86-0f66cc32f560', name: 'child.com' }
}
},
{ id: 'd7384f60-e4ab-4a86-8e2e-0f66cc32f560', name: 'computer.com' },
{ id: 'ca7f972e-64ee-4cb0-80b9-1036fac69d32', name: 'java.util' }
];

因此,它是一个对象数组,每个对象都可以有子对象,子对象也有 id、name 和可能的子对象(子对象是可选的),依此类推,它可以嵌套 X 次。我想更改键名,id 到键,name 到 title 和 child 将仍然是 child 。所以,我的问题是我不知道如何更改 child 内部的 key ,我只是更改了第一级,仅此而已。它应该是这样的:

{
key: '641a1690-6c8b-4ada-ae97-8d82cc4fe7a3',
title: 'com.sample',
children: {
key: 'd7384f60-e4ab-4a86-8e2e-0f66cc32f',
title: 'child.computer.com',
children: { key: 'e4ab-4a86-0f66cc32f560', title: 'child.com' }
}
}

最佳答案

您可以使用递归 来做到这一点。

检查 Object#entries() 调用中 [key-value] 对的 value 是否是一个对象。 p>

如果是这样,为该值递归 再次调用transformObj 函数。否则按原样返回值。

最后使用 Object#fromEntries 将 [key-value] 对数组转换回对象:

const packages = [{ id: '641a1690-6c8b-4ada-ae97-8d82cc4fe7a3', name: 'com.sample', children: { id: 'd7384f60-e4ab-4a86-8e2e-0f66cc32f', name: 'child.computer.com', children: { id: 'e4ab-4a86-0f66cc32f560', name: 'child.com' }}}, { id: 'd7384f60-e4ab-4a86-8e2e-0f66cc32f560', name: 'computer.com' }, { id: 'ca7f972e-64ee-4cb0-80b9-1036fac69d32', name: 'java.util' }];
const replacer = { "id": "key", "name" :"title"};
const transformObj = (obj) => {
if(obj && Object.getPrototypeOf(obj) === Object.prototype){
return Object.fromEntries(
Object.entries(obj)
.map(([k, v]) => [replacer[k] || k, transformObj(v)])
);
}
//Base case, if not an Object literal return value as is
return obj;
}
console.log(packages.map(o => transformObj(o)));

关于Javascript - 更改嵌套数组中所有对象键的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64607585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com