假設我有一個如下所示的 API 回應:
const data = {
users: [
{ name: "John", teams: [{ name: "Liverpool" }] },
{ name: "Sam", teams: [{ name: "MC" }, { name: "United" }] },
],
photos: [
{ id: "123", types: ["JPG", "PNG"], comments: [{ description: "sample photo" }] },
],
};
我想通過將rid屬性添加到每個物件來對其進行轉換。
const data = {
rid: "ABC",
users: [
{ rid: "ABC", name: "John", teams: [{ rid: "ABC", name: "Liverpool" }] },
{ rid: "ABC", name: "Sam", teams: [{ rid: "ABC", name: "MC" }, { rid: "ABC", name: "United" }] },
],
photos: [
{ rid: "ABC", id: "123", types: ["JPG", "PNG"], comments: [{ rid: "ABC", description: "sample photo" }] },
],
};
我該怎么做?我認為涉及某種遞回,但我無法起草解決方案?
謝謝。
uj5u.com熱心網友回復:
您只需要使用遞回函式遍歷物件。
試試下面的片段。
const data = {
users: [
{ name: 'John', teams: [{ name: 'Liverpool' }] },
{ name: 'Sam', teams: [{ name: 'MC' }, { name: 'United' }] },
],
photos: [
{ id: '123', types: ['JPG', 'PNG'], comments: [{ description: 'sample photo' }] },
{ key: null }, // Fixed null values
],
}
function addProperty(obj, key, val) {
if (!obj || typeof obj !== 'object') return
if (!Array.isArray(obj)) obj[key] = val
Object.values(obj).forEach((obj) => addProperty(obj, key, val))
}
addProperty(data, 'rid', 'ABC')
console.log(data)
uj5u.com熱心網友回復:
首先,OP 不會更改 JSON 物件。JSON是基于字串的標準化資料交換格式和帶有靜態方法的 JavaScript 命名空間。
但是 OP 將遞回遍歷/遍歷符合 JSON 的物件型別。
因此,這樣一個函式的實作只需要考慮物件型別和陣列。
在陣列型別的情況下,遞回呼叫發生在forEacharray-item。在物件型別的情況下,values物件自己的所有可列舉鍵/屬性都將被遞回處理。
對于除提供的自定義物件(一個或多個條目)之外的任何物件型別assign都會發生。
下面提供的功能提供了定義要應用分配的最小物件級別的可能性。
function recursivelyAssignDataToEveryObjectType(type, data, startLevel = 0, level = 0) {
if (Array.isArray(type)) {
type
.forEach(item =>
recursivelyAssignDataToEveryObjectType(item, data, startLevel, level 1)
);
} else if (type && 'object' === typeof type) {
Object
.values(type)
.forEach(value =>
recursivelyAssignDataToEveryObjectType(value, data, startLevel, level 1)
);
if (level >= startLevel) {
Object.assign(type, data);
}
}
}
const data = {
users: [
{ name: "John", teams: [{ name: "Liverpool" }] },
{ name: "Sam", teams: [{ name: "MC" }, { name: "United" }] },
],
photos: [
{ id: "123", types: ["JPG", "PNG"], comments: [{ description: "sample photo" }] },
],
};
recursivelyAssignDataToEveryObjectType(data, { rid: "ABC" }, 2);
console.log({ data });
.as-console-wrapper { min-height: 100%!important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/476815.html
標籤:javascript 节点.js 数组
