gpt4 book ai didi

javascript - 将对象结构减少为仅包含特定属性的值

转载 作者:太空宇宙 更新时间:2023-11-04 15:42:45 25 4
gpt4 key购买 nike

假设某事类似于给定的以下对象:

const foo = {
id: 'foo',
name: '...',
test: () => 'fn',
nestedObject: {
id: 'nested',
name: '...',
nestedObjects: [{
id: 'bar',
name: '...',
anotherNested: {
id: 'n1',
name: '...',
oneMoreNestedObjects: [{
id: 'n11',
name: '...',
}, {
id: 'n12',
name: '...',
}]
}
}, {
id: 'bar2',
name: '...',
}]
}
};

我想通过仅选择名称为 id 的属性或者它是具有 id 属性的对象(数组)来将其转换为对象。所以在我的例子中它将是:

const result = {
id: 'foo',
nestedObject: {
id: 'nested',
nestedObjects: [{
id: 'bar',
anotherNested: {
id: 'n1',
oneMoreNestedObjects: [{
id: 'n11',
}, {
id: 'n12',
}]
}
}, {
id: 'bar2',
}]
}
};

顺便说一句:我很喜欢使用 lodash。

最佳答案

您可以对嵌套数组和对象使用迭代和递归方法。

function filter(object) {
return Object.keys(object).reduce(function (r, k) {
if (k === 'id') {
r[k] = object[k];
} else if (object[k] && typeof object[k] === 'object') {
r[k] = filter(object[k]);
}
return r;
}, Array.isArray(object) ? [] : {});
}

var foo = { id: 'foo', name: '...', test: () => 'fn', nestedObject: { id: 'nested', name: '...', nestedObjects: [{ id: 'bar', name: '...', anotherNested: { id: 'n1', name: '...', oneMoreNestedObjects: [{ id: 'n11', name: '...', }, { id: 'n12', name: '...', }] } }, { id: 'bar2', name: '...', }] } },
result = filter(foo);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 将对象结构减少为仅包含特定属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43755505/

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