我的目標是創建這個物件:
{
name: string,
birthday: date
}
通過這個陣列:
const dataArray = [
{
"id": "name",
"type": "string"
},
{
"id": "birthday",
"type": "date"
}
]
因此,我創建了一個陣列的 .map,如下所示:
const inputsValues = {};
dataArray.map(item => {
if(item.type === "date"){
inputsValues[item.id] = new Date(item.value);
return; // this line is the problem
}
inputsValues[item.id] = item.value;
});
有沒有一個選項可以在不使用的情況下在這個函式中回傳else?
uj5u.com熱心網友回復:
const dataArray = [{
"id": "name",
"type": "string"
},
{
"id": "birthday",
"type": "date"
}
]
console.log(
dataArray.reduce((acc, curr) => {
acc[curr.id] = curr.type;
return acc;
}, {})
);
uj5u.com熱心網友回復:
這是你想要達到的目標嗎?
const dataArray = [
{ "id": "name", "type": "string" },
{ "id": "birthday", "type": "date" }
]
console.log(dataArray.reduce((acc, obj, i) => {
const key = obj.id;
const value = obj.type;
acc[key] = value;
return acc;
}, {}))
uj5u.com熱心網友回復:
const data = [
{id: "name", type: "string", value: "John"},
{id: "birthday", type: "date", value: "02.02.22"},
{id: "holiday", type: "date", value: "03.03.33"}
]
const inputsValues = data
// the "return" function - filters all non "date" items
.filter(item => item.type != "date")
// the map inputsValue combination in one function
.reduce((values, item) => ({[item.id]: item.value, ...values}), {})
console.log(inputsValues)
uj5u.com熱心網友回復:
從問題中,我們錯過了item.value定義。
無論如何,這是一個建議。
首先是一個轉換函式:
const type2obj = (t) => {
switch(t) {
case 'date': return new Date();
case 'string': return 'thestringvalue';
default: return 'unknown type';
}
}
然后
const inputsValues = Object.values(dataArray).
reduce( (p, {id, type}) => ({...p, [id]:type2obj2(type)}), {})
解釋:我們回圈遍歷您的 dataArray 的值,對于每個值,我們從空物件(最后)開始減少,每次添加[id]:type2obj2(type)一個屬性,其名稱為 id,其值取決于上面定義的函式。
如果你不喜歡reduce,你可以根據type2obj自己的代碼調整它的想法。
在瀏覽器控制臺中,這給出:
{ name: "thestringvalue",
birthday: Date Wed Mar 09 2022 00:19:39 GMT 0100 (Central European Standard Time) }
uj5u.com熱心網友回復:
僅使用 map 回圈陣列,而不使用回傳的陣列,是一種反模式。函式 map 通過將給定的回呼應用到陣列的所有值(即dataArray )來創建一個新陣列。這不是您的情況,因為您最后想要一個物件,而不是陣列。
Tu 構建您應該使用的結構,而不是使用for of回圈、forEach或Array.reduce()。
如果您只需要將陣列縮減為一個物件,reduce是最佳選擇:
const dataArray = [
{
"id": "name",
"type": "string"
},
{
"id": "birthday",
"type": "date"
}
];
const obj = dataArray.reduce((carry, { id, type, value = '' }) => {
carry[id] = type === 'date' ? new Date() : value;
return carry;
}, {}); // remember to initialize your carry, see reduce doc.
console.log(obj); // My reduced object { name: '', date: 2022-...}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/439988.html
標籤:javascript
