オブジェクトを実装するファクトリ関数の方法を使用しようとしていて、リンクリストの例でそれを試しました。空のリンクリストを初期化してノードを追加しようとしました。それが設定されていない場合は頭を設定し、そうでない場合はチェーン内の最後のノードにノードを追加します。 問題は、頭が決して固まっていないように見えるということです。ここでファクトリ関数のリンクリストの問題
"use strict"
const niceLog = s => {
console.log(JSON.stringify(s, null, 2))
}
function linkedList() {
let head
const node = data => {
return {
data,
next: null
}
}
const add = data => {
if (!head) {
head = node(data)
} else {
const end = node(data)
let n = head
while (n.next) n = n.next
n.next = end
}
}
const del = data => {
let n = head
if (n.data === data) head = head.next
while (n.next) {
if (n.next.data === data) {
n.next = n.next.next
return
}
n = n.next
}
}
return {
head,
add,
del
}
}
const ll = linkedList()
ll.add('cheese')
ll.add('crackers')
ll.add('tea')
ll.add('coffee')
niceLog(ll) // {}
(私は、彼らが新しい、これは私がしようとしていたThatsなぜよう適切に設定されていないキーワードの問題を避けるよう、工場の機能が優れていることを聞いていた、仕事をするES6クラスの構文で同等のコードです工場機能を使用する)
const niceLog = s => {
console.log(JSON.stringify(s, null, 2))
}
class Node {
constructor(data) {
this.data = data
this.next = null
}
}
class LinkedList {
constructor() {
this.head = null
}
add(data){
if (!this.head) {
this.head = new Node(data)
} else {
const end = new Node(data)
let n = this.head
while (n.next) n = n.next
n.next = end
}
}
del(data) {
let n = this.head
if (n.data === data) this.head = this.head.next
while (n.next) {
if (n.next.data === data) {
n.next = n.next.next
return
}
n = n.next
}
}
}
const ll = new LinkedList()
ll.add('cheese')
ll.add('crackers')
ll.add('tea')
ll.add('coffee')
niceLog(ll) // output =
"head": {
"data": "cheese",
"next": {
"data": "crackers",
"next": {
"data": "tea",
"next": {
"data": "coffee",
"next": null
}
}
}
}
}
あなたの質問は何ですか? –
今質問部分を追加しました! – Heisenberg