2017-10-10 122 views
0

我是半新的JavaScript和想創建這種類型的東西 - 像這樣的對象列表:如何在javascript中動態添加對象到對象中?

{ID:1,字段1:VAL1,字段2:值2,現場3:VAL3}

我知道如何設置它,如果我靜態創建它,但不知道如何動態地處理它。在給定的函數中,我將知道ID和其中一個字段,但是有3個獨立的函數來查找每個字段/值,因此我需要使用字段/值更新對象,因爲我學習它們(希望這是有道理的)

可以這樣做,如果有的話可以有人幫助我如何或指向我正在尋找什麼?預先感謝您的任何幫助!

編輯:我覺得我的文章過於含糊,這裏是我想要做什麼:

當功能1,我會知道的ID,比方說1,& someField與val的值」 ' 例如。所以我會將它添加到數組中。

在函數2中,我會知道ID,仍然是1,&不同的字段值爲2例如。我想從之前訪問對象&添加這個新的字段/值(將有多個ID /對象,只是使用這個作爲基地)

所以在數組中,我想能夠訪問由對象ID &該對象的已知字段

+1

'OBJ [ 「字段」 + NUM] = ....' – Li357

+0

閱讀上括號符號的JavaScript屬性存取https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors –

+0

@AndrewLi在這種情況下obj是什麼?對象列表中的對象?我試圖找出如何動態創建對象列表並更新該列表中的對象/添加字段/值作爲代碼獲取到他們 – InsertDisplayName

回答

3

這是一個小例子,我認爲可能會幫助你。這將創建帶有動態名稱和值的objs,並將它們添加到數組中。

var myArray = []; 
 
for (var i = 0; i < 3; i++) { 
 
    var myObj = {}; 
 
    for (var x = 0; x < 3; x++) { 
 
    myObj["Field" + x] = "val" + x; 
 
    } 
 
    myArray.push(myObj); 
 
} 
 
console.log(myArray)
作品的編輯

這裏後

編輯是你更新後的另一個例子。如果我理解了你,那麼我認爲你實際上只需要1個函數,其實質上是更新陣列。我想你的JSON也有點不合適。在下面的例子中,ID將引用一個對象,該對象具有將存儲「列表」的字段數組。

var myArray = []; 
 
var testObj = {}; 
 
testObj.id = 1; 
 
testObj.fields = []; 
 
myArray.push(testObj) 
 

 
// add myValue to the already existing obj with ID 1 
 
addValue(1, "myValue"); 
 
// add myValue2 to the non-existent id 2 obj (it will be dynamically created) 
 
addValue(2, "myValue2"); 
 

 
function addValue(id, val){ 
 
    var foundID = false; 
 
    myArray.forEach(function(obj){ 
 
    if(obj.id === id){ 
 
    var newObj = {}; 
 
    newObj["Field" + id] = val; 
 
    obj.fields.push(newObj); 
 
    foundID = true; 
 
    } 
 
    }); 
 
    // if we did not find an obj with the passed in ID 
 
    // then create and initialize it 
 
    if(!foundID){ 
 
    var newIDObj = {}; 
 
    newIDObj.id = id; 
 
    var fieldsArray = []; 
 
    var newFieldsObj = {}; 
 
    newFieldsObj["Field" + id] = val; 
 
    fieldsArray.push(newFieldsObj); 
 
    newIDObj.fields = fieldsArray; 
 
    myArray.push(newIDObj); 
 
    } 
 
} 
 
console.log(myArray); 
 

 
// How to access a value knowing the ID and the fieldName 
 
var result = getValue(1, "Field1"); 
 

 
// If no result is found, undefined will be returned 
 
// This assumes Field Names are all unique! 
 
function getValue(id, fieldName) { 
 
    var result; 
 
    myArray.forEach(function(currentObj) { 
 
    if (currentObj.id === id) { 
 
     currentObj.fields.forEach(function(currentField) { 
 
     if (typeof currentField[fieldName] !== "undefined") { 
 
      result = currentField[fieldName]; 
 
     } 
 
     }); 
 
    } 
 
    }); 
 
    
 
    console.log("The value with ID: " + id + " and field name: " + fieldName + " is: " + result) 
 
    return result; 
 
}

+0

謝謝!這個&鏈接很有幫助,但我仍然有一些問題。可能在我的文章中太模糊了我想做什麼: 在function1中,我會知道ID,例如1,&someField的值爲'val',所以我會添加這個到一個數組 在函數2中,我會知道ID,仍然是1,&不同的字段值爲2例如。我想要一個從之前訪問對象並向它添加這個新的字段/值(將有多個ID /對象,僅以此爲基礎) 所以在數組中,我希望能夠通過ID&該對象的已知字段 – InsertDisplayName

+0

我添加了另一個示例,而不是對您的措辭100%,但也許它會幫助您 –

+0

這有助於很多,謝謝! – InsertDisplayName