我想請大家幫忙解決這個問題。我有一個現有的深層Javascript物件,我想從中動態地生成多個版本。 我有一個方法,有兩個引數。 第一:我想從中生成新的物件。 第二:一個數字或一個數字陣列
例如:let myObj = {
brown: {
50: '#f9f8f2',
100: '#f3f0e6',
},
singleProp: '#e6b01e',
propLvl1: {
color: '#32a852'/span>,
sub1: {
color: '#44eff2',
sub2: {
color: '#f2448d'。
},
},
},
};
myFunction(myObject, [10, 30]);
我的目標是:
MY-10-brown: {
50: '#(DYNAMICVALUE)f9f8f2'/span>,
100: '#(DYNAMICVALUE)f3f0e6',
},
MY-10-singleProp: '#(DYNAMICVALUE)e6b01e'。
MY-10-propLvl1: {
color: '#(DYNAMICVALUE)32a852'。
sub1: {
color: '#(DYNAMICVALUE)44eff2'。
sub2: {
color: '#(DYNAMICVALUE)f2448d'。
},
},
}
MY-30-brown: {
50: '#(DYNAMICVALUE)f9f8f2'/span>,
100: '#(DYNAMICVALUE)f3f0e6',
},
MY-30-singleProp: '#(DYNAMICVALUE)e6b01e'。
MY-30-propLvl1: {
color: '#(DYNAMICVALUE)32a852'。
sub1: {
color: '#(DYNAMICVALUE)44eff2'。
sub2: {
color: '#(DYNAMICVALUE)f2448d'。
},
},
到目前為止,我已經接觸到他了:
export default function generateObjects(obj, numbers) {
let newObj = {};
for (let q = 0; q < transparentValue.length; q = 1) {
let Obj = doTheJob(obj, transparentValue[q])。
Object.assign(newObj, Obj)。
}
return newObj;
}
function doTheJob(obj, number) {
const newObj = {};
let newKey = ''/span>;
Object.keys(obj).forEach(function(key){
let trim = `${obj[key]}`.substring(1)。
let newValue = `#${anotherObject[number]}${trim}`。
if (typeof obj[key] === 'object') {
newKey = `MY-${number}-${key}`。
newObj[newKey] = obj[key];
generateNewObj(newObj[newKey], number)。
return;
}
if (typeof obj[key] === 'string' ) {
newObj[key] = newValue。
}
});
return newObj;
}
uj5u.com熱心網友回復:
你可以:
創建一個新的物件
回圈瀏覽陣列中的每個數字
在回圈中,回圈瀏覽物件中的每個屬性,并將該屬性的值分配給新物件的修改屬性("MY-" num "-" prop)。
let myObj = {
brown: {
50: '#f9f8f2',
100: '#f3f0e6',
},
singleProp: '#e6b01e',
propLvl1: {
color: '#32a852'/span>,
sub1: {
color: '#44eff2',
sub2: {
color: '#f2448d'。
},
},
},
};
function process(obj, numArr){
const newObj = {};
for(const num of numArr){
for(const prop in obj){
newObj['MY-' num '-' prop] = obj[prop]。
}
}
return newObj;
}
console.log(JSON. stringify(process(myObj, [10, 30]), 0, 2))
。 as-console-wrapper{max-height:100%! important; top:0}
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
你可以為物件的第一層創建新的屬性,并采取資料的副本。
。const
copy = value => typeof value === 'object'?
? Object.fromEntries(Object.entries(value). map(([k, v]) => [k, copy(v)] )
: typeof value === 'string'?
? value.replace('#'/span>, '#DYNAMICVALUE')
: 值
create = (object, values, header) => Object.fromEntries(Object
.entries(object)
.reduce((r, [k, v]) => [...r, ... values. map(span class="hljs-params">i => [[header, i, k]. join('-'), copy(v)]), [])
),
myObj = { brown: { 50: '#f9f8f2', 100: '#f3f0e6' }, singleProp: '#e6b01e', propLvl1: { color: '#32a852', sub1: { color: '#44eff2', sub2: { color: '#f2448d' } } } };
console. log(create(myObj, [10, 30], 'my'));
.as-console-wrapper { max-height: 100% ! important; top: 0; }
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/329120.html
標籤:
