2017-02-06 130 views
1

我想創造angular2,但還沒有一個關聯數組發現了沒有辦法angular2創建關聯數組

這是我曾嘗試

onSubmit(){ 

let inputfield:any[] = []; 

for(var i=0; i<this.inspectionform.value["inputfileds"].length; i++){ 

if(this.inspectionform.value["inputfileds"][i]["input"] != ""){ 
    //here i need help 
    inputfield.push(i : this.inspectionform.value["inputfileds"][i]["input"]) //this returns a syntax error 
    } 

} 

} 那麼我其實期待有是一個鍵和值傳遞到陣列

喜歡的東西

1:sdbhd//pass this to the array 

在for循環中我曾嘗試

//inside the for loop 

    let arrayval = []; 
    arrayval.push(this.inspectionform.value["inputfileds"][i]["input"]) 
    arrayval.push(i) 

    inputfield.push(arrayval); 

這將創建一個新的對象這種性質的每一次

0:njnf 
1:1(value of i) 
+0

JavaScript沒有關聯數組 - 有對象和數組 - 你想要一個對象(一個無序的鍵/值對) – tymeJV

回答

1

JavaScript沒有關聯數組,只需使用{}或新Map API

let xxxMap = new Map(); 

xxxMap.set('key1', 'value 1'); 

xxxMap.set('key2', 5); 

console.log(xxxMap.get('key1')); 

從那裏瞭解更多:Map in Javascript

+0

現在的問題出現在php後端,當我檢查後的請求它顯示實際數組但沒有設置值 –

+0

我認爲PHP後端應該改變標準,在JavaScript中,數組可能包含密鑰,但是您不能使用'length'屬性計算長度。 'var s = []; s ['in'] = 5;的console.log([ '在'] S); console.log(s.length)'返回將會:5,0。 –

+0

你能提供一些樣本數據發送到服務器和服務器的響應也 –

1

您可以使用地圖,但我會選擇一個普通的對象;

演示 const mything = {} mything.foo = 1 mything.foo === mything['foo'] // true mything['bar'] = 1337; mything.bar === 1337 // true mything.foo-bar = 1 // ERROR: can't have dashes mything['foo-bar'] = 1 // Works

在ES6,或任何比較現代的瀏覽器,您可以通過使用Object.keys(mything)得到所有的鑰匙。對於年齡較大的環境下你會不得不遍歷使用for ... in爲證明此填充工具的按鍵:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

你必須要小心的是在你的財產鏈中定義的前一個項目的另一件事。例如,如果你有

var foobar = { foo: { bar: 1 } }

那麼你CANfoobar.foo.bar.toString()得到"1",但如果你嘗試做foobar.foo.bang.toString()你會得到一個錯誤的原因bang沒有在foo對象上定義。

您可以通過執行像foobar.foo.bang && foobar.foo.bang.toString()這樣的警衛檢查來解決這個問題,如果存在爆炸,它只會運行toString方法。

更簡單的方法是使用lodash,它給你_.get_.set分別負責保護和創建缺失的屬性。