JSON 개체에 변수 이름 값 쌍을 동적으로 추가
나는 다음과 같은 IP로 가득 찬 json 객체를 가지고 있습니다.
var ips = {}
그런 다음이 객체에 ip 객체를 추가합니다.
ips[ipID] = {}
그런 다음 각 IP에 동적 / 변수 이름 값 쌍을 추가해야하므로 다음과 같은 코드를 사용하고 있습니다.
var name; var value; var temp = {};
tmp[name] = value
내 질문은 내 결과가 다음과 같이 나오도록 이러한 이름 값 쌍 / tmp를 내 ipID 객체에 어떻게 추가 할 수 있습니까?
ipID = { name : value, anotherName : anotherValue }
그것은 JSON이 아닙니다. Javascript 객체 일 뿐이며 JSON과는 전혀 관련이 없습니다.
대괄호를 사용하여 속성을 동적으로 설정할 수 있습니다. 예:
var obj = {};
obj['name'] = value;
obj['anotherName'] = anotherValue;
이것은 다음과 같은 객체 리터럴로 객체를 생성하는 것과 똑같습니다.
var obj = { name : value, anotherName : anotherValue };
ips
컬렉션에 개체를 이미 추가 한 경우 한 쌍의 대괄호를 사용하여 컬렉션의 개체에 액세스하고 다른 쌍을 사용하여 개체의 속성에 액세스합니다.
ips[ipId] = {};
ips[ipId]['name'] = value;
ips[ipId]['anotherName'] = anotherValue;
공지 사항 위의 코드와 유사하지만, 그냥 사용하고 있는지 ips[ipId]
대신 obj
.
컬렉션에서 개체에 대한 참조를 다시 가져 와서 컬렉션에 남아있는 동안 개체에 액세스하는 데 사용할 수도 있습니다.
ips[ipId] = {};
var obj = ips[ipId];
obj['name'] = value;
obj['anotherName'] = anotherValue;
문자열 변수를 사용하여 속성 이름을 지정할 수 있습니다.
var name = 'name';
obj[name] = value;
name = 'anotherName';
obj[name] = anotherValue;
속성을 식별하는 것은 변수 (문자열)의 값이므로 obj[name]
위 코드에서 두 속성을 모두 사용하는 동안 액세스 할 때 액세스 할 속성을 결정하는 것은 변수의 문자열입니다.
ECMAScript 6을 사용하면 더 나은 방법이 있습니다.
객체 속성 정의에서 계산 된 속성 이름 을 사용할 수 있습니다 . 예를 들면 다음과 같습니다.
var name1 = 'John';
var value1 = '42';
var name2 = 'Sarah';
var value2 = '35';
var ipID = {
[name1] : value1,
[name2] : value2
}
이것은 속성 이름에 대한 변수가있는 다음과 동일합니다.
var ipID = {
John: '42',
Sarah: '35'
}
자바 스크립트 객체를 사용할 때 "점 표기법"을 사용하여 항목을 추가 할 수도 있습니다 ( JSLint가 선호 함 ).
var myArray = { name : "john" };
//will initiate a key-value array with one item "name" and the value "john"
myArray.lastName = "smith";
//will add a key named lastName with the value "smith"
//Object {name: "john", lastName: "smith"}
다음은 Chrome 콘솔에서 테스트 한 스크린 샷입니다.
"ips"의 각 항목이 여러 이름 값 쌍을 가질 수 있다고 가정하고 있으므로 중첩됩니다. 이 데이터 구조는 다음과 같이 얻을 수 있습니다.
var ips = {}
function addIpId(ipID, name, value) {
if (!ips[ipID]) ip[ipID] = {};
var entries = ip[ipID];
// you could add a check to ensure the name-value par's not already defined here
var entries[name] = value;
}
자바 스크립트에서.
var myObject = { "name" : "john" };
// { "name" : "john" };
myObject.gender = "male";
// { "name" : "john", "gender":"male"};
다른 답변이 제안한 내용에서 이것이 도움이 될 것이라고 생각합니다.
var object = ips[ipId];
var name = "Joe";
var anothername = "Fred";
var value = "Thingy";
var anothervalue = "Fingy";
object[name] = value;
object[anothername] = anothervalue;
그러나 이것은 테스트되지 않고 다음의 지속적인 반복을 기반으로 한 가정 일뿐입니다.
object["string"] = value;
//object = {string: value}
초기 JSON에 대한 내 이해가 정확하다면 이러한 솔루션 중 하나가 모든 IP ID를 반복하고 각 ID를 새 개체로 할당하는 데 도움이 될 수 있습니다.
// initial JSON
var ips = {ipId1: {}, ipId2: {}};
// Solution1
Object.keys(ips).forEach(function(key) {
ips[key] = {name: 'value', anotherName: 'another value'};
});
// Solution 2
Object.keys(ips).forEach(function(key) {
Object.assign(ips[key],{name: 'value', anotherName: 'another value'});
});
확인:
console.log(JSON.stringify(ips, null, 2));
위의 진술은 다음과 같습니다.
{
"ipId1": {
"name":"value",
"anotherName":"another value"
},
"ipId2": {
"name":"value",
"anotherName":"another value"
}
}
Lodash _.assign
기능을 사용하여 이를 달성 할 수 있습니다 .
var ipID = {};
_.assign(ipID, {'name': "value"}, {'anotherName': "anotherValue"});
console.log(ipID);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
참고 URL : https://stackoverflow.com/questions/4071499/dynamically-add-variable-name-value-pairs-to-json-object
'Nice programing' 카테고리의 다른 글
마우스를 올릴 때 이미지에 텍스트를 표시하는 방법은 무엇입니까? (0) | 2020.12.13 |
---|---|
루비의 urldecode? (0) | 2020.12.13 |
TypeScript에서 배열을 인스턴스화, 초기화 및 채우는 방법은 무엇입니까? (0) | 2020.12.12 |
AngularJS는 서버와 클라이언트 사이에서 자동으로 데이터 동기화 (0) | 2020.12.12 |
git bisect를 어떻게 중지합니까? (0) | 2020.12.12 |