我有這個陣列
myarr = [
'=title1',
'longText0...',
'longtText1...',
'=title2',
'longTextA...',
'longtTextB...',
'longtTextC...'
];
符號=表示 is 是一個屬性,旁邊是屬于該屬性的專案串列
我想將該陣列轉換為物件
myObj = {
title1: [
'longText0...',
'longtText1...',
],
title2: [
'longTextA...',
'longtTextB...',
'longtTextC...'
]
}
到目前為止,我想出了這段代碼:
const arrayToObject = (array) =>
array.reduce((obj, item) => {
if(item.startsWith('=')) {
const itemName = item.replace('=', '')
obj[itemName] = itemName;
} else {
//add the rest....
}
return obj
}, {})
console.log(arrayToObject(myarr))
到目前為止,我面臨的挑戰是我不確定如何轉彎obj[itemName],所以我可以將物品分配給它。任何想法如何做到這一點?
uj5u.com熱心網友回復:
我不會reduce用一個簡單的for回圈來做到這一點,因為你必須進行itemname多次迭代
let o = {}, n = '';
for (let k of arr) {
if (k.startsWith('=')) {
n = k.substring(1);
o[n] = []
} else {
o[n].push(k);
}
}
您當然也可以使用reduce,但您必須將宣告放在itemname回呼之外
let n = '';
let o = arr.reduce((a, c) => {
if (c.startsWith('=')) {
n = c.substring(1);
a[n] = [];
} else {
a[n].push(c);
}
return a;
}, {});
請注意,沒有錯誤處理,即代碼假定您的陣列結構良好并且陣列中的第一個元素必須以=
uj5u.com熱心網友回復:
以下功能將為您提供所需的結果
function arrayToObject(arr)
{
let returnObj={};
for(let i =0; i <arr.length; i )
{
if(arr[i].startsWith('='))
{
let itemName = arr[i].replace('=','');
returnObj[itemName]=[];
for(let j=i 1; j <arr.length;j )
{
if(arr[j].startsWith('='))
{
break;
}
else
{
let value = arr[j];
returnObj[itemName].push(value) ;
}
}
}
}
return returnObj;
}
uj5u.com熱心網友回復:
這里有一個版本reduce
const myarr = [
'=title1',
'longText0...',
'longtText1...',
'=title2',
'longTextA...',
'longtTextB...',
'longtTextC...'
];
const obj = myarr.reduce((res, el) => {
if(el.startsWith('=')){
const key = el.substring(1)
return {
data: {
...res.data,
[key]: [],
},
key
}
}
return {
...res,
data:{
...res.data,
[res.key]: [...res.data[res.key], el]
}
}
}, {
data: {},
key: ''
}).data
console.log(obj)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/464467.html
標籤:javascript 数组 目的
