2014-10-09 50 views
-1

因此,考慮:如何在Javascript中生成數組數組?

var person = {name: "", address: "", phonenumber: ""} 

我想創建一個循環來接收用戶輸入(直到他們決定他們不想再輸入信息和輸入什麼,或單擊取消)。我也想用人物作爲原型。

所以我猜對象只是爲了存儲任意數量的人的名字/地址/電話號碼。我的邏輯是爲我的循環的每次迭代動態地添加一個完整的數組到一個對象。我的代碼看起來是這樣的:

var person = {name: "", address: "", phonenumber: ""} 
var customer = []; //used to store each person 


var input = "x"; 

//loop prompting user to input name/address/phone number 
for(var i = 0; input != ""; i++){ 
    var input = prompt("Input separated by commas"); 
    //example input: mike, main, 123456789 

    var results = input.split(", "); //create an array from the input 

    //move input into the person array. 
    //person to look like {name = "mike", address = "main", phone = "123456789"} 
    person.name = results.shift(); 
    person.address = results.shift(); 
    person.phone = results; 


    customer[i] = person;//store the person array into the customer array. 
} 

我一直在試圖動態生成這樣的事情:

customer = 
[{name, address, phone}, 
{name, address, phone}, 
{name, address, phone}] 

,然後可以訪問並打印。我一直試圖訪問它

console.log(customer[0].phone); 

不幸的是我得到一個錯誤。

對於我的錯誤抱歉,console.log沒有打印任何內容,因此它似乎沒有存儲在customer [0] .phone中。

我無法訪問任何提示用戶並保存在變量中的數據。當我使用警報功能時,我得到的只是一個空白框。每當我嘗試打印客戶時,我都會收到消息[對象對象]或其他東西

+0

,並祈禱告訴,這是什麼 「錯誤」? – Igor 2014-10-09 03:32:37

+0

'console.log(customer)'怎麼辦?此外,你可以使用'customer.push(person)',這種感覺更「一致」,而不用擔心索引。 – Passerby 2014-10-09 03:32:39

+0

您的代碼不會生成您想要的內容,但它也不會生成錯誤,就像您聲稱的那樣:http://jsfiddle.net/anebvn17/。請解釋你的代碼真正的問題。你真正的問題是什麼?您似乎已經知道如何將元素添加到數組中。 – 2014-10-09 03:33:06

回答

0
var customer = [];//create array 
    var person = {};// create object 
    var input = prompt("...");//your prompt 
    var results = input.split(", "); //create an array from the input 
    person.name = results[0];//add result with 0 index 
    person.address = results[1];//add result with 1 index 
    person.phone = results[2];//add result with index 2 
    customer[0] = person;//add the person object to the array. 

上面的代碼應該按照您的意願進行操作。我很難看出你爲什麼要迭代提示給同一個用戶?所以先試試這個然後繼續。

http://jsfiddle.net/zkc2swmp/1/

不要去提示框irratating你的用戶,使用的形式。也不要迭代類似的東西,你在for循環中的條件基本上創建了一個無限循環,這也是不好的

我的代碼可能會好很多,例如條件,以及如何使用形成。儘管坦率地說,你似乎遠沒有那麼做。所以我開始了你,嘗試一下,看看你是否可以按你想要的方式來實現,然後評論一下幫你做點別的建議。

+0

我沒有爲任何人制作此網頁。我只是在學習如何做JS,所以我剛使用過scratchpad。我想你可以說它幾乎就像一個數據庫。輸入客戶信息,然後可以隨意訪問元素。所以我重複提示給同一個用戶,因爲你輸入的是每個客戶的數據! (想想一個商店詢問你的信息) – user3551329 2014-10-09 03:52:06

+0

用提示進行迭代仍然是一個壞主意。像其他人所說,如果我們點擊取消,它是未定義的。如果我們寫你好,我們沒有多個數組。所以你的代碼會一直失敗。你最好的選擇是使用一個虛擬表單。每次點擊'submit'添加該信息。儘管使用一些條件語句來檢查輸入。 – EasyBB 2014-10-09 03:56:01

0
  1. 首先,每次你被分配到人,即客戶的客戶 [I] =人的時間; 所有其他對象正在被修改,因爲您的斷點是輸入==「」因此所有的對象都被修改爲空值。

  2. 在開始時,您將屬性定義爲「電話號碼」,最後將值存入「電話」。

正確的代碼shud是:

var customer = []; //used to store each person 
var input = "x"; 

//loop prompting user to input name/address/phone number 
for(var i = 0; input != ""; i++){ 
    var input = prompt("Input separated by commas"); 
    //example input: mike, main, 123456789 

    var results = input.split(", "); //create an array from the input 
    var person = {}; 
    person.name = results.shift(); 
    person.address = results.shift(); 
    person.phone = results; 
    customer[i] = person;//store the person array into the customer array. 
} 
+0

也打破循環的最後一項將包含空值... – Aman 2014-10-09 03:58:12

+0

我仍然沒有條件檢查'!=「」'因爲那麼它仍然工作,如果它是'「」'所以如果OP是要重複這一點,親愛的主,我希望他不,我會使用正則表達式來清除所有空白,然後檢查反對。以及在循環中檢查數組長度是否是OP所需的數量。 – EasyBB 2014-10-09 03:58:35

+0

我編輯的代碼,因爲它沒有打印值,因爲前面的所有值由於最後一次輸入而變爲空值。 – Aman 2014-10-09 04:02:14