我想將陣列中的值合并到靜態嵌套物件中。包含值的陣列是這樣的,
['name=ABC XYZ', 'hobbies=[M,N,O,P]', 'profession=S', 'age=27']
并且必須合并值的物件是,
const person = {
details_1: {
name: null,
hobbies: null,
profession: null
},
details_2: {
age: null
}
};
我希望我的輸出物件如下所示,
const updated_person = {
details_1: {
name: 'ABC XYZ',
hobbies: [M,N,O,P],
profession: 'S'
},
details_2: {
age: 27
}
};
非常感謝你的幫助!
uj5u.com熱心網友回復:
我用不同的方法做了另一個解決方案。在這里,我使用了一個介面,我描述了所需的資料結構。在第二部分中,字串陣列被轉換為鍵值對。因此過濾了介面的鍵并添加到空物件字面量中。
const data = ["name=ABC XYZ", "hobbies=[M,N,O,P]", "profession=S", "age=27"];
const dataInterface = {
details_1: { name: null, hobbies: null, profession: null },
details_2: { age: null },
};
function orederData(arr) {
const record = arr.map((item) => {
let [key, value] = item.split("=");
if (value[0] === "[" && value[value.length - 1] === "]") {
value = value.slice(1, value.length - 1).split(",");
}
return { key, value };
});
const dataBlock = {};
Object.keys(dataInterface).map((detail) => {
dataBlock[detail] = {};
Object.keys(dataInterface[detail]).forEach((dataKey) => {
dataBlock[detail][dataKey] = record.filter((record) => {
return record.key === dataKey;
})[0].value;
});
});
return dataBlock;
}
const orderedData = orederData(data);
console.log(orderedData);
uj5u.com熱心網友回復:
您可以通過迭代輸入陣列來簡單地實作這一點。
const arr = ['name=ABC XYZ', 'hobbies=[M,N,O,P]', 'profession=S', 'age=27'];
const person = {
details_1: {},
details_2: {}
};
arr.forEach(item => {
(item.split('=')[0] !== 'age') ? person.details_1[item.split('=')[0]] = item.split('=')[1] : person.details_2[item.split('=')[0]] = item.split('=')[1]
});
console.log(person);
uj5u.com熱心網友回復:
沒有辦法將非結構化陣列干凈地合并到結構化物件中,從而使陣列值最終出現在適當鍵控的人員屬性中。
javascript 確實提供了assign()合并物件的功能,但根據您的要求,您的源資料需要是類似結構的物件,而不是陣列。
所以這:
['name=ABC XYZ', 'hobbies=[M,N,O,P]', 'profession=S', 'age=27']
需要變成這樣:
const source= [{details_1: {"name":"ABC XYZ", "hobbies":"[M,N,O,P]", "profession":"S"}, details_2: {"age":"27"}}]
這樣呼叫 Object.assign():
const new_person = Object.assign(person, source[0]);
填補這個
const person = {
details_1: {
name: null,
hobbies: null,
profession: null
},
details_2: {
age: null
}
};
正確,盡管您可能需要先克隆或實體化并清空person。
或者,如果person是一個物件,你可以有一個 fill() 方法來知道如何處理陣列資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/466396.html
標籤:javascript 数组 目的 嵌套对象
