私のようなipsでいっぱいの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
コレクションに既に追加している場合、1組のブラケットを使用してコレクション内のオブジェクトにアクセスし、別のペアを使用してオブジェクト内のプロパティにアクセスします。
ips[ipId] = {};
ips[ipId]['name'] = value;
ips[ipId]['anotherName'] = anotherValue;
上記のコードと似ていますが、obj
の代わりにips[ipId]
を使用していることに注意してください。
コレクションからオブジェクトへの参照を取得し、それを使用して、オブジェクトがコレクション内にある間にオブジェクトにアクセスすることもできます。
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'
}
javascriptオブジェクトを使用する場合、「ドット表記」を使用してアイテムを追加することもできます( 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;
}
javascriptで。
var myObject = { "name" : "john" };
// { "name" : "john" };
myObject.gender = "male";
// { "name" : "john", "gender":"male"};
最初のJSONの理解が正しい場合、これらのソリューションのいずれかを使用すると、すべてのIP 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"
}
}
他の答えが提案していることから、これは役立つかもしれないと信じています:
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}
これを実現するには、Lodash_.assign
関数を使用します。
var ipID = {};
_.assign(ipID, {'name': "value"}, {'anotherName': "anotherValue"});
console.log(ipID);
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>