如何在javascript中动态地将对象添加到对象中?

时间:2017-10-10 17:49:43

标签: javascript javascript-objects

我是javascript的半新手,想要创建这种类型的东西 - 像这样的对象列表:

{ID:1,Field1:val1,Field2:val2,Field 3:val3}

如果我静态创建但不确定如何动态处理它,我知道如何设置它。在给定的函数中,我将知道ID和其中一个字段,但是有3个单独的函数来查找每个字段/值,因此我需要在学习它们时用字段/值更新对象(希望这是有道理的)

这可以做到,如果有的话,有人会帮助我如何指出我正在寻找的东西吗?预先感谢您的任何帮助!

编辑:我认为我的帖子太模糊了,这就是我想做的事情:

当在function1中时,我会知道ID,让我们说1,& someField的值为'val',例如。所以我将它添加到一个数组中。

在function2中,我会知道ID,仍然是1,&例如,differentField的值为2。我想从之前和之前访问该对象将新的字段/值添加到它(将有多个id / object只使用它作为基础)

所以在数组中我希望能够通过ID& amp;该对象的已知字段

1 个答案:

答案 0 :(得分: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)

编辑Op后编辑

这是您更新后的另一个示例。如果我理解你,那么我认为你真的只需要一个基本上是更新的数组。我想你的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;
}