當我嘗試使用普通函式的 buildGraph 函式時,它可以正常作業,但箭頭函式將空 obj 作為輸出。需要幫助。
var roads = [
"Alice's House-Bob's House", "Alice's House-Cabin",
"Alice's House-Post Office", "Bob's House-Town Hall",
"Daria's House-Ernie's House", "Daria's House-Town Hall",
"Ernie's House-Grete's House", "Grete's House-Farm",
"Grete's House-Shop", "Marketplace-Farm",
"Marketplace-Post Office", "Marketplace-Shop",
"Marketplace-Town Hall", "Shop-Town Hall"
];
let buildGraph = (edges) => {
let obj = {}
let addEdge = (from, to) => (
obj[from] === null ? obj[from] = [to] : obj[from]?.push(to)
)
edges.map(r => r.split("-")).map(([from, to]) => addEdge(from, to))
return obj;
}
console.log(buildGraph(roads)) // Output: {}
uj5u.com熱心網友回復:
替換null為undefined。如果key在物件中找不到 a ,則回傳undefinednot null。
var roads = [
"Alice's House-Bob's House",
"Alice's House-Cabin",
"Alice's House-Post Office",
"Bob's House-Town Hall",
"Daria's House-Ernie's House",
"Daria's House-Town Hall",
"Ernie's House-Grete's House",
"Grete's House-Farm",
"Grete's House-Shop",
"Marketplace-Farm",
"Marketplace-Post Office",
"Marketplace-Shop",
"Marketplace-Town Hall",
"Shop-Town Hall",
];
let buildGraph = (edges) => {
let obj = {};
let addEdge = (from, to) =>
obj[from] === undefined ? (obj[from] = [to]) : obj[from]?.push(to);
edges.map((r) => r.split("-")).map(([from, to]) => addEdge(from, to));
return obj;
};
console.log(buildGraph(roads));
uj5u.com熱心網友回復:
這不是箭頭函式,而是這個比較:
obj[from] === null
運算子執行精確的===型別比較,對于物件上不存在的屬性,屬性的確切型別不是null,而是undefined. 因此,比較是false并且該屬性永遠不會添加到物件中。
將其與以下內容進行比較undefined:
var roads = [
"Alice's House-Bob's House", "Alice's House-Cabin",
"Alice's House-Post Office", "Bob's House-Town Hall",
"Daria's House-Ernie's House", "Daria's House-Town Hall",
"Ernie's House-Grete's House", "Grete's House-Farm",
"Grete's House-Shop", "Marketplace-Farm",
"Marketplace-Post Office", "Marketplace-Shop",
"Marketplace-Town Hall", "Shop-Town Hall"
];
let buildGraph = (edges) => {
let obj = {}
let addEdge = (from, to) => (
obj[from] === undefined ? obj[from] = [to] : obj[from]?.push(to)
)
edges.map(r => r.split("-")).map(([from, to]) => addEdge(from, to))
return obj;
}
console.log(buildGraph(roads)) // Output: {}
uj5u.com熱心網友回復:
你也可以使用.reduce(). 如果您想將某些東西組合在一起,通常會使用它
var roads = [
"Alice's House-Bob's House", "Alice's House-Cabin",
"Alice's House-Post Office", "Bob's House-Town Hall",
"Daria's House-Ernie's House", "Daria's House-Town Hall",
"Ernie's House-Grete's House", "Grete's House-Farm",
"Grete's House-Shop", "Marketplace-Farm",
"Marketplace-Post Office", "Marketplace-Shop",
"Marketplace-Town Hall", "Shop-Town Hall"
];
let result = roads.reduce((obj, road) => {
let [from, to] = road.split("-")
obj[from] ? obj[from].push(to) : obj[from] = [to]
return obj
},{})
console.log(result)
uj5u.com熱心網友回復:
因為你的obj[from] === null比較
有時“雙重相等”仍然有意義:
var roads = [
"Alice's House-Bob's House", "Alice's House-Cabin",
"Alice's House-Post Office", "Bob's House-Town Hall",
"Daria's House-Ernie's House", "Daria's House-Town Hall",
"Ernie's House-Grete's House", "Grete's House-Farm",
"Grete's House-Shop", "Marketplace-Farm",
"Marketplace-Post Office", "Marketplace-Shop",
"Marketplace-Town Hall", "Shop-Town Hall"
];
let buildGraph = (edges) => {
let obj = {}
let addEdge = (from, to) =>
(obj[from] == null ? obj[from] = [to] : obj[from]?.push(to))
edges.map(r => r.split("-")).map(([from, to]) => addEdge(from, to))
return obj;
}
console.log(buildGraph(roads)) // Output: {}
這樣你就可以一步比較 undefined 或 null
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/460215.html
標籤:javascript ecmascript-6 箭头函数
下一篇:無效的日期,即使它完全相同
