我有一個物件陣列,我試圖使用 map 運算子從中獲取值,但我得到的整個 json 物件只是我想要的值陣列。下面是我的代碼:
const obj = [
{
a: {
b: 'Paul',
}
},
{
c: 'Byeeee',
}
];
obj.map((val) => console.log(val));
我得到的是
{ a: { b: 'Paul' } }
{ c: 'Byeeee' }
我想要的是:
['Paul','Byeeee']
有人讓我知道如何獲得所需的輸出。
uj5u.com熱心網友回復:
您可以遞回地執行此操作。您可以首先獲取物件的值,然后使用.flatMap(). 如果遇到作為物件的值,則可以通過呼叫函式來遞回地獲取該物件的值。否則,您可以回傳該值。在這里使用的好處.flatMap()是,當遞回呼叫回傳一個陣列時,我們不會得到內部陣列,而是將陣列展平為一個結果陣列:
const obj = [{ a: { b: 'Paul', } }, { c: 'Byeeee', } ];
const getValues = (obj) => {
return Object.values(obj).flatMap(val => Object(val) === val ? getValues(val) : val);
}
console.log(getValues(obj));
uj5u.com熱心網友回復:
您可以使用以下解決方案。
const data = [{ a: { b: 'Paul' } }, { c: 'Byeeee' }];
const flatObjectValues = (obj, result) => {
// recursive function to get object values
const objValues = Object.values(obj);
if (objValues?.length > 0) {
objValues.map((v) => {
if (typeof v === 'object' && !Array.isArray(v)) {
flatObjectValues(v, result);
} else {
result.push(v);
}
return v;
});
}
};
const updatedData = [];
data.map((x) => flatObjectValues(x, updatedData));
console.log('updatedData: ', updatedData);
uj5u.com熱心網友回復:
您可以使用recursionwith array.reduce,如 Fellowing。
function getAllValues(objuct) {
return objuct.reduce((acc, curr) => {
if (typeof curr === 'object') {
return [...acc, ...getAllValues(Object.values(curr))];
}
return [...acc, curr];
}, []);
}
uj5u.com熱心網友回復:
遞回解決方案可能是:
const arr = [{a: {b: "Paul",},},{c: "Byeeee",},];
const flatArrOfObjects = (arr) => {
const values = [];
for (const i in arr) flatObj(arr[i], values);
return values;
};
const flatObj = (obj, result) => {
for (const [key, value] of Object.entries(obj)) {
if (typeof value === "object") flatObj(value, result);
else result.push(value);
}
};
console.log(flatArrOfObjects(arr));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/491749.html
標籤:javascript
