2017-10-10 6 views
0

내가 자바 스크립트에 반 새로운 오전 이런 종류의 것을 만들고 싶습니다 -이 같은 개체의 목록 :자바 스크립트에서 객체에 객체를 동적으로 추가하는 방법은 무엇입니까?

{ID : 1, 필드 1 : val1과를, 필드 2 : val2만큼, 필드 3 : val3}

정적으로 만들지 만 동적으로 처리하는 방법을 모르는 경우이를 설정하는 방법을 알고 있습니다. 주어진 함수에서 ID와 필드 중 하나를 알 수 있지만 각 필드/값을 찾을 수있는 3 개의 개별 함수가 있으므로 필드/값으로 개체를 업데이트해야합니다.

이 작업을 수행 할 수 있습니까? 그렇다면 누군가 나를 어떻게 도와 주거나 내가 원하는 것을 가르쳐 줄 수 있습니까? 어떤 도움을 주셔서 미리 감사드립니다!

편집 : 발 '의 값으로, & someField을

기능 1에서, 나는의 1을 가정 해 봅시다, ID를 알 : 나는 내 게시물이 너무 막연한 생각, 여기에 내가하고 싶은 것입니다 '예를 들면. 그래서 이것을 배열에 추가 할 것입니다.

function2에서 ID가 여전히 1, & differentField이고 값이 2 인 것을 알 수 있습니다. & 이전에 객체에 액세스하고 싶습니다.이 새로운 필드/값을 추가하십시오.이 객체를 하나의 기본 객체로 사용하는 것입니다.

그래서 배열에서 객체에 액세스 할 수 있기를 원합니다. ID가 & 인 개체는 해당 개체의 알려진 필드가됩니다.

+1

'의 OBJ [ "필드"+ NUM = .... ' – Li357

+0

자바 스크립트 속성 접근 금구 표기 읽기 최대 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에있을 때, 나는 '1', 'someField'와 같이 'val'값을 알고 있습니다. 그래서 이것을 추가 할 것입니다. 배열에 function2에서 나는 ID가 여전히 1이고 differentField가 2 인 값을 알고 있습니다. 이 새 필드/값을 거기에 추가하십시오.이 객체를 하나의 기본 객체로 사용하는 것입니다. 그래서 배열에서 ID와 ID로 객체에 액세스 할 수 있기를 원합니다. 그 객체에 대한 알려진 필드들 – InsertDisplayName

+0

문구에 100 %가 아닌 다른 예제를 추가했지만, 아마도 도움이 될 것입니다. –

+0

그 덕분에 많은 도움을 얻었습니다! – InsertDisplayName