2017-05-07 103 views
-5

我怎樣才能重寫這段代碼來對象的JavaScript。由於陣列使用被禁止,我只能在這裏使用對象。堅持向數組推送值,我想將這個值推入對象。如何將數組轉換爲JavaScript中的對象?

var container = []; 
document.addEventListener("submit", function(e){ 
    e.preventDefault(); 
}); 
window.addEventListener("load",function(){ 
    var submit = document.getElementsByClassName("btn-primary"); 
     submit[0].addEventListener("click",add,false); 
    document.getElementById("pobrisi").addEventListener("click",deleteAll,false); 

    var dateElement = document.getElementById('datum'); 
     dateElement.valueAsDate = new Date(); 
    var today = new Date(); 
    var dd = today.getDate(); 
    var mm = today.getMonth()+1; 
    var yyyy = today.getFullYear(); 
    if(dd<10){ 
     dd='0'+dd 
    } 
    if(mm<10){ 
     mm='0'+mm 
    } 
    today = yyyy+'-'+mm+'-'+dd; 

    dateElement.setAttribute("min",today); 
}); 

function add() { 

    var title = document.getElementById("title").value; 
    var type = document.getElementById("type").value; 
    var datum = document.getElementById("datum").value.split("-"); 
     datum = datum[2]+". "+datum[1]+". "+datum[0]; 
    var data = new Book(title,type,datum); 

    container.push(data.add()); 
    display(); 
} 

function display(data) { 

    var destination = document.getElementById("list"); 
    var html = ""; 

     for(var i =0;i <container.length; i++) { 
      html +="<li>"+container[i]+"</li>"; 
     } 
     destination.innerHTML = html; 
} 
function deleteAll(){ 
    container=[]; 
    document.getElementById("list").innerHTML=""; 
} 

想知道可以編寫此代碼whitout任何陣列用法。

+1

是否允許使用像var myVar = {key:value,key :value} –

+0

是的,我被允許使用對象,但不知道如何使用。 – Slasher

+0

你有沒有考慮學習如何使用對象? –

回答

0

JavaScript對象是去

1-定義新的對象一個好辦法:

var myVar = {}; 

var myVar = new Object(); 

2-用法

// insert a new value, it doesn't matter if the value is a string or int or even another object 
// set a new value 
myVar.myFirstValue="this is my first value"; 
// get existing value and do what ever you want with it 
var value = myVar.myFirstValue 
1

由於這是作業,我覺得我不應該爲你解決,而是幫助你在正確的方向。

像漿紗提到你可以使用對象

使用JavaScript對象一本書看起來像

const book = { 
    title: 'my awesome title', 
    type: 'novel' 
}; 
  • 本書對象
  • 標題是一個值的屬性「我真棒標題'
  • 類型是屬性值'小說'

但對象也可以有其他對象作爲值。像

const BookShelf= { 
    Book1: { 
     Title: 'my awesome title', 
     Type: 'novel' 
    }, 
    Book2: { 
     Title: 'my horrible title', 
     Type: 'sci-fi' 
    } 
}; 

東西,你可以參考在書架上的書有兩種方式

const book1 = BookShelf.Book1 // Returns the book1 object 
const title1 = Book1.Title; // Get the title 
const sametitle = BookShelf.Book1.Title // Returns title for book1, same as above. 

您還可以使用括號:

const book1 = BookShelf['Book1']; 
const title1 = BookShelf['Book1']['Title]; 

你甚至可以像一個對象上做出新特性這個:

const Book3 = { 
    Title: 'running out of ideas' 
    Type: 'memoir' 
};  
BookShelf['Book3'] = Book3; 

現在BookShelf具有Book3屬性。所以,你的書架物體看起來像

const BookShelf= { 
    Book1: { 
     Title: 'my awesome title', 
     Type: 'novel' 
    }, 
    Book2: { 
     Title: 'my horrible title', 
     Type: 'sci-fi' 
    }, 
    Book3 = { 
     Title: 'running out of ideas' 
     Type: 'memoir' 
    };  
}; 

這應該讓你開始:)

+0

你應該提到,這是濫用對象*,因爲*數組是不允許的 - 即,*如果*數組是可用的,對象應該永遠不會被這樣使用 – naomik

2

初始言論

這裏的問題,我估計是你沒有學過的基礎知識數據抽象呢。如果你不知道如何實現一個數組,你可能不應該依賴於一個數組。對象和陣列非常普遍,因爲它們非常有用。但是,如果您不知道具體的數據類型是如何提供給您的(即,它提供了什麼便利?),那麼很可能您會濫用類型

如果您將代碼放在這裏,但是這樣的技術不在班上,你很明顯會從外部獲得幫助。假設教師的課程安排合理,您應該能夠根據您已經涵蓋的材料解決問題。

根據你的代碼,很明顯你真的嘗試了很多,但你爲什麼認爲這裏的人會拿出一個你的老師會接受的答案?我們應該如何知道可以使用什麼


一個有趣的練習仍然

OK,所以(我們認爲)我們需要數組,但讓我們假裝數組不存在。如果我們可以在下面得到這個代碼,我們可能不完全有一個數組,但我們有一些工作數組。

最重要的是,如果我們能夠在下面使用這些代碼,我們就會知道如何創建一個可以保存動態數值的數據類型。只有這樣我們才能開始真正瞭解陣列正在爲我們做些什麼。

// make a list 
let l = list(1) // (1) 

// push an item on the end 
l = push(l, 2) // (1 2) 

// push another item on the end 
l = push(l, 3) // (1 2 3) 

// display each item of the list 
listeach(l, function (x) { 
    console.log(x) 
}) 

// should output 
// 1 
// 2 
// 3 

運行的演示

我們所要做的就是使代碼位(上圖)的工作,而無需使用任何陣列。我會進一步限制自己,並且只有使用函數,if/else和等於test ===。我在你的代碼中看到了這些東西,所以我認爲我也可以使用它們。

但我應該相信你的老師會讓你寫這樣的代碼嗎?它的工作原理,當然,但我不認爲它給你帶來任何接近你的答案

var empty = function() {} 
 

 
function isEmpty (x) { 
 
    return x === empty 
 
} 
 

 
function pair (x,y) { 
 
    return function (p) { 
 
    return p(x,y) 
 
    } 
 
} 
 

 
function head (p) { 
 
    return p(function (x,y) { 
 
    return x 
 
    }) 
 
} 
 

 
function tail (p) { 
 
    return p(function (x,y) { 
 
    return y 
 
    }) 
 
} 
 

 
function push (l, x) { 
 
    if (isEmpty(l)) 
 
    return list(x) 
 
    else 
 
    return pair(head(l), push(tail(l), x)) 
 
} 
 

 
function list (x) { 
 
    return pair(x, empty) 
 
} 
 

 
function listeach (l, f) { 
 
    if (isEmpty(l)) 
 
    return null 
 
    else 
 
    (f(head(l)), listeach(tail(l), f)) 
 
} 
 

 
// make a list 
 
let l = list(1) // (1) 
 
// push an item on the end 
 
l = push(l, 2) // (1 2) 
 
// push another item on the end 
 
l = push(l, 3) // (1 2 3) 
 

 
// display each item of the list 
 
listeach(l, function (x) { 
 
    console.log(x) 
 
})


致閉幕詞

它顯示爲壽,你可以使用一個對象來代替一個數組。被接受的答案(在這個時候)顯示了對一個對象如何被用來解決你的問題的非常狹窄的理解。在這個人爲的演示之後,您是否確信您正確且有效地使用對象?

你知道如何實現一個對象嗎?你能履行這個合同嗎(下面)?我的意思是,你能寫出函數object,setget,以便下面的表達式計算出它們的預期結果嗎?

如果不明顯,則不允許使用Object來實現此目的。演習的全部意義就是讓你還沒有獲得

m = object()       // m 

set(m, key, x)      // m 
get(m, key)       // x 

set(m, key2, y)      // m 
get(m, key2)       // y 

set(m, key3, set(object(), key4, z)) // m 
get(get(m, key3), key4)    // z 

我將離開這個作爲練習你和我強烈建議你做它數據類型。我想你會在這個過程中學到很多東西,並且深入理解和欣賞像Array或者Object這樣的高級數據類型給你的

相關問題