2017-10-10 14 views
0

私はJavaScriptに半新しいですし、この種の何かを作成したい - このようなオブジェクトのリスト:javascriptでオブジェクトを動的にオブジェクトに追加するには?

{ID:1、フィールド1:VAL1を、フィールド2:VAL2、フィールド3:val3は}

静的に作成するが、動的に処理する方法がわからない場合は、これを設定する方法を知っています。与えられた関数では、私はIDとフィールドの一つを知るでしょうが、各フィールド/値を見つけるための3つの別々の関数がありますので、それらを学ぶときにフィールド/値でオブジェクトを更新する必要があります

これを行うことができますか?もしそうなら誰かが私にどのように助けてくれるのでしょうか、私が探しているものを指摘することができますか?助けをよろしくお願いします。

EDITは:valを「の値と、& someFieldを

はfunction1,3で、私はのは、1を言わせて、IDを知っている:私は私のポストはあまりにも漠然としたと思う、ここで私がやりたいものです' 例えば。そこでこれを配列に追加します。

function2では、IDがわかります。まだ、& differentFieldの値は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

これは私があなたを助けるかもしれないと思う小さな例です。動的な名前と値を持つobjが作成され、配列に追加されます。オペアンプの編集ここ

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'であるとわかりますので、これを追加します function2では、IDはまだ1、&differentFieldの値は2であることがわかります。この新しいフィールド/値を追加してください(これをベースとして複数のID /オブジェクトがあるだけです) したがって、配列の中でIDとIDでオブジェクトにアクセスできるようにしたいのですが、そのオブジェクトの既知のフィールド – InsertDisplayName

+0

私はあなたの言葉に100%ではなく別の例を追加しましたが、多分それはあなたを助けるでしょう –

+0

それは、多くのおかげで助けて! – InsertDisplayName

関連する問題